diff --git a/pandatool/src/gtk-stats/gtkStatsGraph.cxx b/pandatool/src/gtk-stats/gtkStatsGraph.cxx index 5798a07833..794f4cea05 100644 --- a/pandatool/src/gtk-stats/gtkStatsGraph.cxx +++ b/pandatool/src/gtk-stats/gtkStatsGraph.cxx @@ -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); diff --git a/pandatool/src/gtk-stats/gtkStatsMonitor.cxx b/pandatool/src/gtk-stats/gtkStatsMonitor.cxx index 6563d69e1f..74b11a3f89 100644 --- a/pandatool/src/gtk-stats/gtkStatsMonitor.cxx +++ b/pandatool/src/gtk-stats/gtkStatsMonitor.cxx @@ -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. */ diff --git a/pandatool/src/gtk-stats/gtkStatsMonitor.h b/pandatool/src/gtk-stats/gtkStatsMonitor.h index e752e8c346..e98214355a 100644 --- a/pandatool/src/gtk-stats/gtkStatsMonitor.h +++ b/pandatool/src/gtk-stats/gtkStatsMonitor.h @@ -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(); diff --git a/pandatool/src/gtk-stats/gtkStatsServer.cxx b/pandatool/src/gtk-stats/gtkStatsServer.cxx index ae81157c4e..3f9ed4ccee 100644 --- a/pandatool/src/gtk-stats/gtkStatsServer.cxx +++ b/pandatool/src/gtk-stats/gtkStatsServer.cxx @@ -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");*/ } /** diff --git a/pandatool/src/gtk-stats/gtkStatsServer.h b/pandatool/src/gtk-stats/gtkStatsServer.h index 72fa61bbd6..a027ddecfe 100644 --- a/pandatool/src/gtk-stats/gtkStatsServer.h +++ b/pandatool/src/gtk-stats/gtkStatsServer.h @@ -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;