im.pidgin.pidgin: 67cb3e90607a4b30b35a7d3dfe73b7eec371ad3e
rekkanoryo at pidgin.im
rekkanoryo at pidgin.im
Thu Jan 24 00:25:53 EST 2008
-----------------------------------------------------------------
Revision: 67cb3e90607a4b30b35a7d3dfe73b7eec371ad3e
Ancestor: 18ef4f37bd517422108a825df6d78ba063ef7c81
Author: rekkanoryo at pidgin.im
Date: 2008-01-24T05:19:51
Branch: im.pidgin.pidgin
Modified files:
pidgin/gtkconv.c
ChangeLog:
Fix some issues with the infopane and dragging when the infopane takes the
place of a tab. Fixes #4690. There are still a few obscure bugs in this
infopane stuff that we should probably fix...
-------------- next part --------------
============================================================
--- pidgin/gtkconv.c e4b4e3790a0f1f25f115603341f9429fa5159a83
+++ pidgin/gtkconv.c 36ebed693314aabd4836913f85e4d122cf28865a
@@ -169,6 +169,7 @@ static void pidgin_conv_set_position_siz
static void pidgin_conv_set_position_size(PidginWindow *win, int x, int y,
int width, int height);
+static gboolean pidgin_conv_xy_to_right_infopane(PidginWindow *win, int x, int y);
static GdkColor *get_nick_color(PidginConversation *gtkconv, const char *name) {
static GdkColor col;
@@ -6885,6 +6886,18 @@ pidgin_conv_update_buttons_by_protocol(P
gray_stuff_out(PIDGIN_CONVERSATION(conv));
}
+static gboolean
+pidgin_conv_xy_to_right_infopane(PidginWindow *win, int x, int y)
+{
+ gint pane_x, pane_y, x_rel;
+ PidginConversation *gtkconv;
+
+ gdk_window_get_origin(win->notebook->window, &pane_x, &pane_y);
+ x_rel = x - pane_x;
+ gtkconv = pidgin_conv_window_get_active_gtkconv(win);
+ return (x_rel > gtkconv->infopane->allocation.x + gtkconv->infopane->allocation.width / 2);
+}
+
int
pidgin_conv_get_tab_at_xy(PidginWindow *win, int x, int y, gboolean *to_right)
{
@@ -6920,7 +6933,7 @@ pidgin_conv_get_tab_at_xy(PidginWindow *
tab = gtk_notebook_get_tab_label(GTK_NOTEBOOK(notebook), page);
/* Make sure the tab is not hidden beyond an arrow */
- if (!GTK_WIDGET_DRAWABLE(tab))
+ if (!GTK_WIDGET_DRAWABLE(tab) && gtk_notebook_get_show_tabs(notebook))
continue;
if (horiz) {
@@ -8179,7 +8192,6 @@ notebook_motion_cb(GtkWidget *widget, Gd
GtkWidget *tab;
gint page_num;
gboolean horiz_tabs = FALSE;
- PidginConversation *gtkconv;
gboolean to_right = FALSE;
/* Get the window that the cursor is over. */
@@ -8193,20 +8205,27 @@ notebook_motion_cb(GtkWidget *widget, Gd
dest_notebook = GTK_NOTEBOOK(dest_win->notebook);
- page_num = pidgin_conv_get_tab_at_xy(dest_win,
- e->x_root, e->y_root, &to_right);
- to_right = to_right && (win != dest_win);
+ if (gtk_notebook_get_show_tabs(dest_notebook)) {
+ page_num = pidgin_conv_get_tab_at_xy(dest_win,
+ e->x_root, e->y_root, &to_right);
+ to_right = to_right && (win != dest_win);
+ tab = pidgin_conv_window_get_gtkconv_at_index(dest_win, page_num)->tabby;
+ } else {
+ page_num = 0;
+ to_right = pidgin_conv_xy_to_right_infopane(dest_win, e->x_root, e->y_root);
+ tab = pidgin_conv_window_get_gtkconv_at_index(dest_win, page_num)->infopane;
+ }
if (gtk_notebook_get_tab_pos(dest_notebook) == GTK_POS_TOP ||
gtk_notebook_get_tab_pos(dest_notebook) == GTK_POS_BOTTOM) {
horiz_tabs = TRUE;
}
- gtkconv = pidgin_conv_window_get_gtkconv_at_index(dest_win, page_num);
- tab = gtkconv->tabby;
- if (gtk_notebook_get_show_tabs(dest_notebook) == FALSE) {
- dnd_hints_show_relative(HINT_ARROW_DOWN, gtkconv->infopane, HINT_POSITION_CENTER, HINT_POSITION_TOP);
- dnd_hints_show_relative(HINT_ARROW_UP, gtkconv->infopane, HINT_POSITION_CENTER, HINT_POSITION_BOTTOM);
+ if (gtk_notebook_get_show_tabs(dest_notebook) == FALSE && win == dest_win)
+ {
+ /* dragging a tab from a single-tabbed window over its own window */
+ dnd_hints_hide_all();
+ return TRUE;
} else if (horiz_tabs) {
if (((gpointer)win == (gpointer)dest_win && win->drag_tab < page_num) || to_right) {
dnd_hints_show_relative(HINT_ARROW_DOWN, tab, HINT_POSITION_RIGHT, HINT_POSITION_TOP);
@@ -8403,6 +8422,7 @@ notebook_release_cb(GtkWidget *widget, G
notebook_release_cb(GtkWidget *widget, GdkEventButton *e, PidginWindow *win)
{
PidginWindow *dest_win;
+ GtkNotebook *dest_notebook;
PurpleConversation *conv;
PidginConversation *gtkconv;
gint dest_page_num = 0;
@@ -8478,9 +8498,16 @@ notebook_release_cb(GtkWidget *widget, G
"conversation-dragging", win, dest_win);
/* Get the destination page number. */
- if (!new_window)
- dest_page_num = pidgin_conv_get_tab_at_xy(dest_win,
- e->x_root, e->y_root, &to_right);
+ if (!new_window) {
+ dest_notebook = GTK_NOTEBOOK(dest_win->notebook);
+ if (gtk_notebook_get_show_tabs(dest_notebook)) {
+ dest_page_num = pidgin_conv_get_tab_at_xy(dest_win,
+ e->x_root, e->y_root, &to_right);
+ } else {
+ dest_page_num = 0;
+ to_right = pidgin_conv_xy_to_right_infopane(dest_win, e->x_root, e->y_root);
+ }
+ }
gtkconv = pidgin_conv_window_get_gtkconv_at_index(win, win->drag_tab);
More information about the Commits
mailing list