X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=shell%2Fev-navigation-action-widget.c;h=5a04fd3a9bd6312bb2ba38ec87a9bc0366778fc2;hb=5e55b6b5e74175b5638337616b84527fb8286908;hp=1de4cf1a060627ed954f08686221adda5957afb9;hpb=8228ff475e7dced57dbaa9550255534d0c275767;p=evince.git diff --git a/shell/ev-navigation-action-widget.c b/shell/ev-navigation-action-widget.c index 1de4cf1a..5a04fd3a 100644 --- a/shell/ev-navigation-action-widget.c +++ b/shell/ev-navigation-action-widget.c @@ -27,7 +27,8 @@ static void ev_navigation_action_widget_init (EvNavigationActionWidget static void ev_navigation_action_widget_class_init (EvNavigationActionWidgetClass *action_widget); static void ev_navigation_action_widget_toggled (GtkToggleToolButton *toggle); static gboolean ev_navigation_action_widget_button_press_event (GtkWidget *widget, - GdkEventButton *event); + GdkEventButton *event, + gpointer data); G_DEFINE_TYPE (EvNavigationActionWidget, ev_navigation_action_widget, GTK_TYPE_TOGGLE_TOOL_BUTTON) @@ -42,19 +43,27 @@ static gint signals[LAST_SIGNAL]; static void ev_navigation_action_widget_init (EvNavigationActionWidget *action_widget) { + GtkWidget *toggle_button; + + /* It's rather dirty hack but we need a child to connect to + * button press event + */ + + toggle_button = gtk_bin_get_child (GTK_BIN (action_widget)); + + g_signal_connect (toggle_button, "button-press-event", + G_CALLBACK (ev_navigation_action_widget_button_press_event), + action_widget); return; } static void ev_navigation_action_widget_class_init (EvNavigationActionWidgetClass *klass) { - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); GtkToggleToolButtonClass *toggle_tool_button_class = GTK_TOGGLE_TOOL_BUTTON_CLASS (klass); - widget_class->button_press_event = ev_navigation_action_widget_button_press_event; toggle_tool_button_class->toggled = ev_navigation_action_widget_toggled; - signals[SHOW_MENU] = g_signal_new ("show-menu", G_OBJECT_CLASS_TYPE (klass), @@ -157,11 +166,11 @@ static void popup_menu_under_arrow (EvNavigationActionWidget *button, GdkEventButton *event) { + g_signal_emit (button, signals[SHOW_MENU], 0); + if (!button->menu) return; - g_signal_emit (button, signals[SHOW_MENU], 0); - gtk_menu_popup (button->menu, NULL, NULL, (GtkMenuPositionFunc) menu_position_func, button, @@ -187,9 +196,11 @@ ev_navigation_action_widget_toggled (GtkToggleToolButton *toggle) static gboolean ev_navigation_action_widget_button_press_event (GtkWidget *widget, - GdkEventButton *event) + GdkEventButton *event, + gpointer data) { - EvNavigationActionWidget *button = EV_NAVIGATION_ACTION_WIDGET (widget); + EvNavigationActionWidget *button = EV_NAVIGATION_ACTION_WIDGET (data); + if (event->button == 1) { popup_menu_under_arrow (button, event); gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (button), TRUE);