sdgui: accelerate the hamburger
The hamburger initially resisted being accelerated.
This commit is contained in:
parent
54ef836eec
commit
85a30d20c3
41
src/sdgui.c
41
src/sdgui.c
|
@ -30,6 +30,7 @@ static struct
|
||||||
{
|
{
|
||||||
GtkWidget *window; ///< Top-level window
|
GtkWidget *window; ///< Top-level window
|
||||||
GtkWidget *notebook; ///< Notebook with tabs
|
GtkWidget *notebook; ///< Notebook with tabs
|
||||||
|
GtkWidget *hamburger; ///< Hamburger menu
|
||||||
GtkWidget *entry; ///< Search entry widget
|
GtkWidget *entry; ///< Search entry widget
|
||||||
GtkWidget *view; ///< Entries view
|
GtkWidget *view; ///< Entries view
|
||||||
|
|
||||||
|
@ -157,12 +158,39 @@ on_switch_page (G_GNUC_UNUSED GtkWidget *widget, G_GNUC_UNUSED GtkWidget *page,
|
||||||
search (g_ptr_array_index (g.dictionaries, g.dictionary));
|
search (g_ptr_array_index (g.dictionaries, g.dictionary));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
accelerate_hamburger (GdkEvent *event)
|
||||||
|
{
|
||||||
|
gchar *accelerator = NULL;
|
||||||
|
g_object_get (gtk_widget_get_settings (g.window), "gtk-menu-bar-accel",
|
||||||
|
&accelerator, NULL);
|
||||||
|
if (!accelerator)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
guint key = 0;
|
||||||
|
GdkModifierType mods = 0;
|
||||||
|
gtk_accelerator_parse (accelerator, &key, &mods);
|
||||||
|
g_free (accelerator);
|
||||||
|
if (!key || event->key.keyval != key || event->key.state != mods)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
gtk_button_clicked (GTK_BUTTON (g.hamburger));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
on_key_press (G_GNUC_UNUSED GtkWidget *widget, GdkEvent *event,
|
on_key_press (G_GNUC_UNUSED GtkWidget *widget, GdkEvent *event,
|
||||||
G_GNUC_UNUSED gpointer data)
|
G_GNUC_UNUSED gpointer data)
|
||||||
{
|
{
|
||||||
|
// The "activate" signal of the GtkMenuButton cannot be used
|
||||||
|
// from a real accelerator, due to "no trigger event for menu popup".
|
||||||
|
if (accelerate_hamburger (event))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
if (event->key.state == GDK_CONTROL_MASK)
|
if (event->key.state == GDK_CONTROL_MASK)
|
||||||
{
|
{
|
||||||
|
// Can't use gtk_widget_add_accelerator() to change-current-page(-1/+1)
|
||||||
|
// because that signal has arguments, which cannot be passed.
|
||||||
if (event->key.keyval == GDK_KEY_Page_Up)
|
if (event->key.keyval == GDK_KEY_Page_Up)
|
||||||
{
|
{
|
||||||
gtk_notebook_prev_page (GTK_NOTEBOOK (g.notebook));
|
gtk_notebook_prev_page (GTK_NOTEBOOK (g.notebook));
|
||||||
|
@ -294,14 +322,15 @@ main (int argc, char *argv[])
|
||||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
|
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
|
||||||
gtk_widget_show_all (menu);
|
gtk_widget_show_all (menu);
|
||||||
|
|
||||||
GtkWidget *hamburger = gtk_menu_button_new ();
|
g.hamburger = gtk_menu_button_new ();
|
||||||
gtk_menu_button_set_direction (GTK_MENU_BUTTON (hamburger), GTK_ARROW_NONE);
|
gtk_menu_button_set_direction
|
||||||
gtk_menu_button_set_popup (GTK_MENU_BUTTON (hamburger), menu);
|
(GTK_MENU_BUTTON (g.hamburger), GTK_ARROW_NONE);
|
||||||
gtk_button_set_relief (GTK_BUTTON (hamburger), GTK_RELIEF_NONE);
|
gtk_menu_button_set_popup (GTK_MENU_BUTTON (g.hamburger), menu);
|
||||||
gtk_widget_show (hamburger);
|
gtk_button_set_relief (GTK_BUTTON (g.hamburger), GTK_RELIEF_NONE);
|
||||||
|
gtk_widget_show (g.hamburger);
|
||||||
|
|
||||||
gtk_notebook_set_action_widget
|
gtk_notebook_set_action_widget
|
||||||
(GTK_NOTEBOOK (g.notebook), hamburger, GTK_PACK_END);
|
(GTK_NOTEBOOK (g.notebook), g.hamburger, GTK_PACK_END);
|
||||||
|
|
||||||
// FIXME: when the clear icon shows, the widget changes in height
|
// FIXME: when the clear icon shows, the widget changes in height
|
||||||
g.entry = gtk_search_entry_new ();
|
g.entry = gtk_search_entry_new ();
|
||||||
|
|
Loading…
Reference in New Issue