changeset 11614:f72607814e4a

[gaim-migrate @ 13888] sadrul fixed that dragging to the right of the tab in another window thing, and i modified it a little, because i'm picky or something committer: Tailor Script <tailor@pidgin.im>
author Tim Ringenbach <marv@pidgin.im>
date Wed, 05 Oct 2005 02:08:23 +0000
parents d15a1d755417
children a9c5fcce537b
files src/gtkconv.c src/gtkconv.h
diffstat 2 files changed, 24 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/gtkconv.c	Wed Oct 05 01:52:20 2005 +0000
+++ b/src/gtkconv.c	Wed Oct 05 02:08:23 2005 +0000
@@ -117,8 +117,6 @@
 static gboolean update_send_to_selection(GaimGtkWindow *win);
 static void generate_send_to_items(GaimGtkWindow *win);
 
-
-
 /* Prototypes. <-- because Paco-Paco hates this comment. */
 static void got_typing_keypress(GaimGtkConversation *gtkconv, gboolean first);
 static void gray_stuff_out(GaimGtkConversation *gtkconv);
@@ -5192,7 +5190,7 @@
 }
 
 int
-gaim_gtkconv_get_tab_at_xy(GaimGtkWindow *win, int x, int y)
+gaim_gtkconv_get_tab_at_xy(GaimGtkWindow *win, int x, int y, gboolean *to_right)
 {
 	gint nb_x, nb_y, x_rel, y_rel;
 	GtkNotebook *notebook;
@@ -5201,6 +5199,9 @@
 	gint count;
 	gboolean horiz;
 
+	if (to_right)
+		*to_right = FALSE;
+
 	notebook = GTK_NOTEBOOK(win->notebook);
 
 	gdk_window_get_origin(win->notebook->window, &nb_x, &nb_y);
@@ -5221,12 +5222,20 @@
 			if (x_rel >= tab->allocation.x - GAIM_HIG_BOX_SPACE &&
 					x_rel <= tab->allocation.x + tab->allocation.width + GAIM_HIG_BOX_SPACE) {
 				page_num = i;
+
+				if (to_right && x_rel >= tab->allocation.x + tab->allocation.width/2)
+					*to_right = TRUE;
+
 				break;
 			}
 		} else {
 			if (y_rel >= tab->allocation.y - GAIM_HIG_BOX_SPACE &&
 					y_rel <= tab->allocation.y + tab->allocation.height + GAIM_HIG_BOX_SPACE) {
 				page_num = i;
+
+				if (to_right && y_rel >= tab->allocation.y + tab->allocation.height/2)
+					*to_right = TRUE;
+
 				break;
 			}
 		}
@@ -5710,9 +5719,6 @@
 		gtk_widget_set_state(widget, GTK_STATE_NORMAL);
 }
 
-
-
-
 static void
 notebook_init_grab(GaimGtkWindow *gtkwin, GtkWidget *widget)
 {
@@ -5766,6 +5772,8 @@
 		gint nb_x, nb_y, page_num;
 		gint arrow1_x, arrow1_y, arrow2_x, arrow2_y;
 		gboolean horiz_tabs = FALSE;
+		GaimGtkConversation *gtkconv;
+		gboolean to_right = FALSE;
 
 		/* Get the window that the cursor is over. */
 		dest_win = gaim_gtk_conv_window_get_at_xy(e->x_root, e->y_root);
@@ -5776,7 +5784,6 @@
 			return TRUE;
 		}
 
-
 		dest_notebook = GTK_NOTEBOOK(dest_win->notebook);
 
 		gdk_window_get_origin(GTK_WIDGET(dest_notebook)->window, &nb_x, &nb_y);
@@ -5785,7 +5792,8 @@
 		arrow1_y = arrow2_y = nb_y;
 
 		page_num = gaim_gtkconv_get_tab_at_xy(dest_win,
-		                                      e->x_root, e->y_root);
+		                                      e->x_root, e->y_root, &to_right);
+		to_right = to_right && (win != dest_win);
 
 		if (gtk_notebook_get_tab_pos(dest_notebook) == GTK_POS_TOP ||
 		    gtk_notebook_get_tab_pos(dest_notebook) == GTK_POS_BOTTOM) {
@@ -5793,12 +5801,13 @@
 			    horiz_tabs = TRUE;
 		    }
 
-		tab = gaim_gtk_conv_window_get_gtkconv_at_index(dest_win, page_num)->tabby;
+		gtkconv = gaim_gtk_conv_window_get_gtkconv_at_index(dest_win, page_num);
+		tab = gtkconv->tabby;
 
 		if (horiz_tabs) {
 			arrow1_x = arrow2_x = nb_x + tab->allocation.x;
 
-			if ((gpointer)win == (gpointer)dest_win && win->drag_tab < page_num) {
+			if (((gpointer)win == (gpointer)dest_win && win->drag_tab < page_num) || to_right) {
 				arrow1_x += tab->allocation.width;
 				arrow2_x += tab->allocation.width;
 			}
@@ -5873,7 +5882,7 @@
 	* Make sure a tab was actually clicked. The arrow buttons
 	* mess things up.
 	*/
-	tab_clicked = gaim_gtkconv_get_tab_at_xy(win, e->x_root, e->y_root);
+	tab_clicked = gaim_gtkconv_get_tab_at_xy(win, e->x_root, e->y_root, NULL);
 
 	if (tab_clicked == -1)
 		return FALSE;
@@ -5934,6 +5943,7 @@
 	GaimGtkConversation *gtkconv;
 	gint dest_page_num = 0;
 	gboolean new_window = FALSE;
+	gboolean to_right = FALSE;
 
 	/*
 	* Don't check to make sure that the event's window matches the
@@ -6006,7 +6016,7 @@
 	/* Get the destination page number. */
 	if (!new_window)
 		dest_page_num = gaim_gtkconv_get_tab_at_xy(dest_win,
-		                                           e->x_root, e->y_root);
+		                                           e->x_root, e->y_root, &to_right);
 
 	gtkconv = GAIM_GTK_CONVERSATION(conv);
 
@@ -6015,7 +6025,7 @@
 	} else {
 		gaim_gtk_conv_window_remove_gtkconv(win, gtkconv);
 		gaim_gtk_conv_window_add_gtkconv(dest_win, gtkconv);
-		gtk_notebook_reorder_child(GTK_NOTEBOOK(dest_win->notebook), gtkconv->tab_cont, dest_page_num);
+		gtk_notebook_reorder_child(GTK_NOTEBOOK(dest_win->notebook), gtkconv->tab_cont, dest_page_num + to_right);
 		gaim_gtk_conv_window_switch_gtkconv(dest_win, gtkconv);
 		if (new_window) {
 			gint win_width, win_height;
--- a/src/gtkconv.h	Wed Oct 05 01:52:20 2005 +0000
+++ b/src/gtkconv.h	Wed Oct 05 02:08:23 2005 +0000
@@ -184,6 +184,7 @@
 GaimGtkWindow *gaim_gtkconv_get_window(GaimGtkConversation *gtkconv);
 GdkPixbuf *gaim_gtkconv_get_tab_icon(GaimConversation *conv, gboolean small_icon);
 void gaim_gtkconv_new(GaimConversation *conv);
+int gaim_gtkconv_get_tab_at_xy(GaimGtkWindow *win, int x, int y, gboolean *to_right);
 /*@}*/
 
 /**************************************************************************/