X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fui%2Fgui%2Fpsppire-cell-renderer-button.c;h=703ff3ddfd3056572b168dbc095cc58199bb2cd4;hb=4e3feede0f6b3d2e67d6e41a9ddea3738e574dc3;hp=978908e01f6fd8ced6da4095710399bbed448556;hpb=46510f46c169c5d5d1f13bcb2e1ff2aa9fffe05f;p=pspp diff --git a/src/ui/gui/psppire-cell-renderer-button.c b/src/ui/gui/psppire-cell-renderer-button.c index 978908e01f..703ff3ddfd 100644 --- a/src/ui/gui/psppire-cell-renderer-button.c +++ b/src/ui/gui/psppire-cell-renderer-button.c @@ -292,25 +292,6 @@ psppire_cell_renderer_button_clicked (GtkButton *button, g_free (path); } -static gboolean -psppire_cell_renderer_button_focus_out_event (GtkWidget *widget, - GdkEvent *event, - gpointer data) -{ - PsppireCellRendererButton *cell_button = data; - - g_signal_handlers_disconnect_by_func (widget, - psppire_cell_renderer_button_focus_out_event, - data); - g_signal_handlers_disconnect_by_func (widget, - psppire_cell_renderer_button_clicked, - data); - - gtk_cell_renderer_stop_editing (GTK_CELL_RENDERER (cell_button), FALSE); - - return FALSE; -} - #define IDLE_ID_STRING "psppire-cell-renderer-button-idle-id" static gboolean @@ -359,7 +340,17 @@ psppire_cell_renderer_button_press_event (GtkButton *button, /* Allow right-click events to propagate upward in the widget hierarchy. Otherwise right-click menus, that trigger on a button-press-event on the containing PsppSheetView, will pop up if the button is rendered as - a facade but not if the button widget exists. */ + a facade but not if the button widget exists. + + We have to translate the event's data by hand to be relative to the + parent window, because the normal GObject signal propagation mechanism + won't do it for us. (This might be a hint that we're doing this + wrong.) */ + gint x, y; + + gdk_window_get_position (event->window, &x, &y); + event->x += x; + event->y += y; g_signal_stop_emission_by_name (button, "button-press-event"); return FALSE; } @@ -416,12 +407,8 @@ psppire_cell_renderer_button_start_editing (GtkCellRenderer *cell, "xalign", xalign, "yalign", yalign, "path", path, - "slash", cell_button->slash, NULL); - g_signal_connect (G_OBJECT (cell_button->button), "focus-out-event", - G_CALLBACK (psppire_cell_renderer_button_focus_out_event), - cell); g_signal_connect (G_OBJECT (cell_button->button), "clicked", G_CALLBACK (psppire_cell_renderer_button_clicked), cell);