pstats: Add keyboard shortcuts in GTK+ implementation

This commit is contained in:
rdb 2022-12-01 13:03:53 +01:00
parent 0421ee31b3
commit 1e542a43a1
5 changed files with 37 additions and 41 deletions

View File

@ -55,6 +55,8 @@ GtkStatsGraph(GtkStatsMonitor *monitor, bool has_label_stack) :
//gtk_window_set_transient_for(GTK_WINDOW(_window), GTK_WINDOW(parent_window));
//gtk_window_set_position(GTK_WINDOW(_window), GTK_WIN_POS_CENTER_ON_PARENT);
gtk_window_add_accel_group(GTK_WINDOW(_window), monitor->get_accel_group());
gtk_widget_add_events(_window,
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
GDK_POINTER_MOTION_MASK);

View File

@ -270,6 +270,14 @@ get_window() const {
return _window;
}
/**
*
*/
GtkAccelGroup *GtkStatsMonitor::
get_accel_group() const {
return ((GtkStatsServer *)_server)->get_accel_group();
}
/**
* Returns the screen DPI.
*/

View File

@ -78,6 +78,7 @@ public:
virtual void user_guide_bars_changed();
GtkWidget *get_window() const;
GtkAccelGroup *get_accel_group() const;
double get_resolution() const;
PStatGraph *open_timeline();

View File

@ -30,9 +30,6 @@ GtkStatsServer() {
#endif
_last_session.set_binary();
_window = nullptr;
_menu_bar = nullptr;
_options_menu = nullptr;
_time_units = 0;
@ -417,6 +414,14 @@ get_window() const {
return _window;
}
/**
* Returns the server window's accelerator group.
*/
GtkAccelGroup *GtkStatsServer::
get_accel_group() const {
return _accel_group;
}
/**
* Returns the menu handle to the server's menu bar.
*/
@ -479,8 +484,8 @@ create_window() {
}), this);
// Set up the menu.
GtkAccelGroup *accel_group = gtk_accel_group_new();
gtk_window_add_accel_group(GTK_WINDOW(_window), accel_group);
_accel_group = gtk_accel_group_new();
gtk_window_add_accel_group(GTK_WINDOW(_window), _accel_group);
_menu_bar = gtk_menu_bar_new();
setup_session_menu();
@ -533,6 +538,8 @@ setup_session_menu() {
GtkStatsServer *self = (GtkStatsServer *)data;
self->new_session();
}), this);
gtk_widget_add_accelerator(item, "activate", _accel_group,
GDK_KEY_n, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
item = gtk_menu_item_new_with_mnemonic("_Open Session...");
gtk_menu_shell_append(GTK_MENU_SHELL(_session_menu), item);
@ -541,6 +548,8 @@ setup_session_menu() {
GtkStatsServer *self = (GtkStatsServer *)data;
self->open_session();
}), this);
gtk_widget_add_accelerator(item, "activate", _accel_group,
GDK_KEY_o, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
item = gtk_menu_item_new_with_mnemonic("Open _Last Session");
_open_last_session_menu_item = item;
@ -564,6 +573,8 @@ setup_session_menu() {
GtkStatsServer *self = (GtkStatsServer *)data;
self->save_session();
}), this);
gtk_widget_add_accelerator(item, "activate", _accel_group,
GDK_KEY_s, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
item = gtk_menu_item_new_with_mnemonic("_Close Session");
_close_session_menu_item = item;
@ -574,6 +585,8 @@ setup_session_menu() {
GtkStatsServer *self = (GtkStatsServer *)data;
self->close_session();
}), this);
gtk_widget_add_accelerator(item, "activate", _accel_group,
GDK_KEY_w, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
GtkWidget *sep = gtk_separator_menu_item_new();
gtk_menu_shell_append(GTK_MENU_SHELL(_session_menu), sep);
@ -600,40 +613,10 @@ setup_session_menu() {
gtk_main_quit();
}
}), this);
gtk_widget_add_accelerator(item, "activate", _accel_group,
GDK_KEY_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
gtk_widget_show_all(_session_menu);
/*
_session_menu = CreatePopupMenu();
MENUITEMINFO mii;
memset(&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_STRING | MIIM_FTYPE | MIIM_SUBMENU;
mii.fType = MFT_STRING;
mii.hSubMenu = _session_menu;
mii.dwTypeData = "&Session";
InsertMenuItem(_menu_bar, GetMenuItemCount(_menu_bar), TRUE, &mii);
AppendMenu(_session_menu, MF_STRING, MI_session_new, "&New Session\tCtrl+N");
AppendMenu(_session_menu, MF_STRING, MI_session_open, "&Open Session...\tCtrl+O");
if (_last_session.exists()) {
AppendMenu(_session_menu, MF_STRING, MI_session_open_last, "Open &Last Session");
} else {
AppendMenu(_session_menu, MF_STRING | MF_DISABLED, MI_session_open_last, "Open &Last Session");
}
AppendMenu(_session_menu, MF_STRING | MF_DISABLED, MI_session_save, "&Save Session...\tCtrl+S");
AppendMenu(_session_menu, MF_STRING | MF_DISABLED, MI_session_close, "&Close Session\tCtrl+W");
AppendMenu(_session_menu, MF_SEPARATOR, 0, nullptr);
AppendMenu(_session_menu, MF_STRING | MF_DISABLED, MI_session_export_json, "&Export as JSON...");
AppendMenu(_session_menu, MF_SEPARATOR, 0, nullptr);
AppendMenu(_session_menu, MF_STRING, MI_exit, "E&xit");*/
}
/**

View File

@ -36,6 +36,7 @@ public:
bool close_session();
GtkWidget *get_window() const;
GtkAccelGroup *get_accel_group() const;
GtkWidget *get_menu_bar() const;
GtkWidget *get_status_bar() const;
@ -57,10 +58,11 @@ private:
Filename _last_session;
Filename _save_filename;
GtkWidget *_window;
GtkWidget *_menu_bar;
GtkWidget *_session_menu;
GtkWidget *_options_menu;
GtkWidget *_window = nullptr;
GtkAccelGroup *_accel_group = nullptr;
GtkWidget *_menu_bar = nullptr;
GtkWidget *_session_menu = nullptr;
GtkWidget *_options_menu = nullptr;
GtkWidget *_status_bar;
GtkWidget *_status_bar_label = nullptr;
GtkWidget *_new_session_menu_item;