[gedit/gnome-3-2] When right clicking in a tab set the tab as active.
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit/gnome-3-2] When right clicking in a tab set the tab as active.
- Date: Thu, 8 Dec 2011 14:17:33 +0000 (UTC)
commit e60e937509803e05293a2160df5a6ba12a978cb2
Author: Ignacio Casal Quinteiro <icq gnome org>
Date: Thu Dec 8 15:16:26 2011 +0100
When right clicking in a tab set the tab as active.
Most of this code has been borrowed from gnome-terminal.
Fixes bug: https://bugzilla.gnome.org/show_bug.cgi?id=665640
gedit/gedit-multi-notebook.c | 4 +--
gedit/gedit-notebook.c | 76 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 77 insertions(+), 3 deletions(-)
---
diff --git a/gedit/gedit-multi-notebook.c b/gedit/gedit-multi-notebook.c
index 0cd7c70..bbfe82f 100644
--- a/gedit/gedit-multi-notebook.c
+++ b/gedit/gedit-multi-notebook.c
@@ -236,9 +236,7 @@ notebook_button_press_event (GtkNotebook *notebook,
if (GDK_BUTTON_PRESS == event->type && 3 == event->button)
{
g_signal_emit (G_OBJECT (mnb), signals[SHOW_POPUP_MENU], 0,
- event);
-
- return TRUE;
+ event);
}
return FALSE;
diff --git a/gedit/gedit-notebook.c b/gedit/gedit-notebook.c
index d312f0b..ae68117 100644
--- a/gedit/gedit-notebook.c
+++ b/gedit/gedit-notebook.c
@@ -201,6 +201,81 @@ gedit_notebook_grab_focus (GtkWidget *widget)
gtk_widget_grab_focus (tab);
}
+static gint
+find_tab_num_at_pos (GtkNotebook *notebook,
+ gint screen_x,
+ gint screen_y)
+{
+ GtkNotebook *nb = GTK_NOTEBOOK (notebook);
+ GtkPositionType tab_pos;
+ GtkWidget *page;
+ GtkAllocation tab_allocation;
+ gint page_num = 0;
+
+ tab_pos = gtk_notebook_get_tab_pos (GTK_NOTEBOOK (notebook));
+
+ while ((page = gtk_notebook_get_nth_page (nb, page_num)))
+ {
+ GtkWidget *tab;
+ gint max_x, max_y, x_root, y_root;
+
+ tab = gtk_notebook_get_tab_label (nb, page);
+ g_return_val_if_fail (tab != NULL, -1);
+
+ if (!gtk_widget_get_mapped (GTK_WIDGET (tab)))
+ {
+ page_num++;
+ continue;
+ }
+
+ gdk_window_get_origin (gtk_widget_get_window (tab), &x_root, &y_root);
+
+ gtk_widget_get_allocation (tab, &tab_allocation);
+ max_x = x_root + tab_allocation.x + tab_allocation.width;
+ max_y = y_root + tab_allocation.y + tab_allocation.height;
+
+ if ((tab_pos == GTK_POS_TOP || tab_pos == GTK_POS_BOTTOM) && screen_x <= max_x)
+ {
+ return page_num;
+ }
+
+ if ((tab_pos == GTK_POS_LEFT || tab_pos == GTK_POS_RIGHT) && screen_y <= max_y)
+ {
+ return page_num;
+ }
+
+ page_num++;
+ }
+
+ return -1;
+}
+
+static gboolean
+gedit_notebook_button_press (GtkWidget *widget,
+ GdkEventButton *event)
+{
+ GtkNotebook *nb = GTK_NOTEBOOK (widget);
+ gint tab_clicked;
+
+ if (event->type != GDK_BUTTON_PRESS ||
+ event->button != 3 ||
+ (event->state & gtk_accelerator_get_default_mod_mask ()) != 0)
+ {
+ return FALSE;
+ }
+
+ tab_clicked = find_tab_num_at_pos (nb, event->x_root, event->y_root);
+ if (tab_clicked < 0)
+ {
+ return FALSE;
+ }
+
+ /* switch to the page the mouse is over */
+ gtk_notebook_set_current_page (nb, tab_clicked);
+
+ return TRUE;
+}
+
/*
* We need to override this because when we don't show the tabs, like in
* fullscreen we need to have wrap around too
@@ -424,6 +499,7 @@ gedit_notebook_class_init (GeditNotebookClass *klass)
object_class->set_property = gedit_notebook_set_property;
gtkwidget_class->grab_focus = gedit_notebook_grab_focus;
+ gtkwidget_class->button_press_event = gedit_notebook_button_press;
notebook_class->change_current_page = gedit_notebook_change_current_page;
notebook_class->switch_page = gedit_notebook_switch_page;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]