Mercurial > pidgin.yaz
comparison pidgin/gtkconv.c @ 18229:8dff6641287b
disapproval of revision '2a48d00e606eaf3e2c5c492cdee05b1a069468ee'
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Sun, 22 Jul 2007 07:02:21 +0000 |
parents | 3449f18ff2e2 |
children | 5733c0691c25 |
comparison
equal
deleted
inserted
replaced
18228:3449f18ff2e2 | 18229:8dff6641287b |
---|---|
182 static GdkColor* generate_nick_colors(guint *numcolors, GdkColor background); | 182 static GdkColor* generate_nick_colors(guint *numcolors, GdkColor background); |
183 static gboolean color_is_visible(GdkColor foreground, GdkColor background, int color_contrast, int brightness_contrast); | 183 static gboolean color_is_visible(GdkColor foreground, GdkColor background, int color_contrast, int brightness_contrast); |
184 static void pidgin_conv_update_fields(PurpleConversation *conv, PidginConvFields fields); | 184 static void pidgin_conv_update_fields(PurpleConversation *conv, PidginConvFields fields); |
185 static void focus_out_from_menubar(GtkWidget *wid, PidginWindow *win); | 185 static void focus_out_from_menubar(GtkWidget *wid, PidginWindow *win); |
186 static void pidgin_conv_tab_pack(PidginWindow *win, PidginConversation *gtkconv); | 186 static void pidgin_conv_tab_pack(PidginWindow *win, PidginConversation *gtkconv); |
187 static gboolean infopane_release_cb(GtkWidget *widget, GdkEventButton *e, PidginConversation *conv); | |
188 static gboolean infopane_press_cb(GtkWidget *widget, GdkEventButton *e, PidginConversation *conv); | |
187 | 189 |
188 static GdkColor *get_nick_color(PidginConversation *gtkconv, const char *name) { | 190 static GdkColor *get_nick_color(PidginConversation *gtkconv, const char *name) { |
189 static GdkColor col; | 191 static GdkColor col; |
190 GtkStyle *style = gtk_widget_get_style(gtkconv->imhtml); | 192 GtkStyle *style = gtk_widget_get_style(gtkconv->imhtml); |
191 float scale; | 193 float scale; |
4375 } | 4377 } |
4376 | 4378 |
4377 static GtkWidget * | 4379 static GtkWidget * |
4378 setup_common_pane(PidginConversation *gtkconv) | 4380 setup_common_pane(PidginConversation *gtkconv) |
4379 { | 4381 { |
4380 GtkWidget *paned, *vbox, *frame, *imhtml_sw; | 4382 GtkWidget *paned, *vbox, *frame, *imhtml_sw, *event_box; |
4381 GtkCellRenderer *rend; | 4383 GtkCellRenderer *rend; |
4382 GtkTreePath *path; | 4384 GtkTreePath *path; |
4383 PurpleConversation *conv = gtkconv->active_conv; | 4385 PurpleConversation *conv = gtkconv->active_conv; |
4384 gboolean chat = (conv->type == PURPLE_CONV_TYPE_CHAT); | 4386 gboolean chat = (conv->type == PURPLE_CONV_TYPE_CHAT); |
4385 GtkPolicyType imhtml_sw_hscroll; | 4387 GtkPolicyType imhtml_sw_hscroll; |
4391 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); | 4393 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
4392 gtk_paned_pack1(GTK_PANED(paned), vbox, TRUE, TRUE); | 4394 gtk_paned_pack1(GTK_PANED(paned), vbox, TRUE, TRUE); |
4393 gtk_widget_show(vbox); | 4395 gtk_widget_show(vbox); |
4394 | 4396 |
4395 /* Setup the info pane */ | 4397 /* Setup the info pane */ |
4398 event_box = gtk_event_box_new(); | |
4399 gtk_widget_show(event_box); | |
4396 gtkconv->infopane_hbox = gtk_hbox_new(FALSE, 0); | 4400 gtkconv->infopane_hbox = gtk_hbox_new(FALSE, 0); |
4397 gtk_box_pack_start(GTK_BOX(vbox), gtkconv->infopane_hbox, FALSE, FALSE, 0); | 4401 gtk_box_pack_start(GTK_BOX(vbox), event_box, FALSE, FALSE, 0); |
4402 gtk_container_add(GTK_CONTAINER(event_box), gtkconv->infopane_hbox); | |
4398 gtk_widget_show(gtkconv->infopane_hbox); | 4403 gtk_widget_show(gtkconv->infopane_hbox); |
4404 gtk_widget_add_events(event_box, | |
4405 GDK_BUTTON1_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK); | |
4406 g_signal_connect(G_OBJECT(event_box), "button_press_event", | |
4407 G_CALLBACK(infopane_press_cb), gtkconv); | |
4408 g_signal_connect(G_OBJECT(event_box), "button_release_event", | |
4409 G_CALLBACK(infopane_release_cb), gtkconv); | |
4410 | |
4399 | 4411 |
4400 gtkconv->infopane = gtk_cell_view_new(); | 4412 gtkconv->infopane = gtk_cell_view_new(); |
4401 gtkconv->infopane_model = gtk_list_store_new(NUM_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING); | 4413 gtkconv->infopane_model = gtk_list_store_new(NUM_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING); |
4402 gtk_cell_view_set_model(GTK_CELL_VIEW(gtkconv->infopane), | 4414 gtk_cell_view_set_model(GTK_CELL_VIEW(gtkconv->infopane), |
4403 GTK_TREE_MODEL(gtkconv->infopane_model)); | 4415 GTK_TREE_MODEL(gtkconv->infopane_model)); |
7592 } | 7604 } |
7593 | 7605 |
7594 /* | 7606 /* |
7595 * THANK YOU GALEON! | 7607 * THANK YOU GALEON! |
7596 */ | 7608 */ |
7609 | |
7610 static gboolean | |
7611 infopane_press_cb(GtkWidget *widget, GdkEventButton *e, PidginConversation *gtkconv) | |
7612 { | |
7613 int nb_x, nb_y; | |
7614 | |
7615 if (e->button != 1 || e->type != GDK_BUTTON_PRESS) | |
7616 return FALSE; | |
7617 | |
7618 if (gtkconv->win->in_drag) { | |
7619 purple_debug(PURPLE_DEBUG_WARNING, "gtkconv", | |
7620 "Already in the middle of a window drag at tab_press_cb\n"); | |
7621 return TRUE; | |
7622 } | |
7623 | |
7624 gtkconv->win->in_predrag = TRUE; | |
7625 gtkconv->win->drag_tab = gtk_notebook_page_num(GTK_NOTEBOOK(gtkconv->win->notebook), gtkconv->tab_cont); | |
7626 | |
7627 gdk_window_get_origin(gtkconv->infopane_hbox->window, &nb_x, &nb_y); | |
7628 | |
7629 gtkconv->win->drag_min_x = gtkconv->infopane_hbox->allocation.x + nb_x; | |
7630 gtkconv->win->drag_min_y = gtkconv->infopane_hbox->allocation.y + nb_y; | |
7631 gtkconv->win->drag_max_x = gtkconv->infopane_hbox->allocation.width + gtkconv->win->drag_min_x; | |
7632 gtkconv->win->drag_max_y = gtkconv->infopane_hbox->allocation.height + gtkconv->win->drag_min_y; | |
7633 | |
7634 | |
7635 /* Connect the new motion signals. */ | |
7636 gtkconv->win->drag_motion_signal = | |
7637 g_signal_connect(G_OBJECT(gtkconv->win->notebook), "motion_notify_event", | |
7638 G_CALLBACK(notebook_motion_cb), gtkconv->win); | |
7639 | |
7640 gtkconv->win->drag_leave_signal = | |
7641 g_signal_connect(G_OBJECT(gtkconv->win->notebook), "leave_notify_event", | |
7642 G_CALLBACK(notebook_leave_cb), gtkconv->win); | |
7643 | |
7644 return FALSE; | |
7645 | |
7646 } | |
7647 | |
7597 static gboolean | 7648 static gboolean |
7598 notebook_press_cb(GtkWidget *widget, GdkEventButton *e, PidginWindow *win) | 7649 notebook_press_cb(GtkWidget *widget, GdkEventButton *e, PidginWindow *win) |
7599 { | 7650 { |
7600 gint nb_x, nb_y, x_rel, y_rel; | 7651 gint nb_x, nb_y, x_rel, y_rel; |
7601 int tab_clicked; | 7652 int tab_clicked; |
7678 win->drag_leave_signal = | 7729 win->drag_leave_signal = |
7679 g_signal_connect(G_OBJECT(widget), "leave_notify_event", | 7730 g_signal_connect(G_OBJECT(widget), "leave_notify_event", |
7680 G_CALLBACK(notebook_leave_cb), win); | 7731 G_CALLBACK(notebook_leave_cb), win); |
7681 | 7732 |
7682 return FALSE; | 7733 return FALSE; |
7734 } | |
7735 | |
7736 static gboolean | |
7737 infopane_release_cb(GtkWidget *widget, GdkEventButton *e, PidginConversation *gtkconv) | |
7738 { | |
7683 } | 7739 } |
7684 | 7740 |
7685 static gboolean | 7741 static gboolean |
7686 notebook_release_cb(GtkWidget *widget, GdkEventButton *e, PidginWindow *win) | 7742 notebook_release_cb(GtkWidget *widget, GdkEventButton *e, PidginWindow *win) |
7687 { | 7743 { |
8372 | 8428 |
8373 if (pidgin_conv_window_get_gtkconv_count(win) == 1) { | 8429 if (pidgin_conv_window_get_gtkconv_count(win) == 1) { |
8374 /* Er, bug in notebooks? Switch to the page manually. */ | 8430 /* Er, bug in notebooks? Switch to the page manually. */ |
8375 gtk_notebook_set_current_page(GTK_NOTEBOOK(win->notebook), 0); | 8431 gtk_notebook_set_current_page(GTK_NOTEBOOK(win->notebook), 0); |
8376 | 8432 |
8377 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), | 8433 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), FALSE); |
8378 purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/tabs")); | |
8379 } else | 8434 } else |
8380 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), TRUE); | 8435 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), TRUE); |
8381 | 8436 |
8382 focus_gtkconv = g_list_nth_data(pidgin_conv_window_get_gtkconvs(win), | 8437 focus_gtkconv = g_list_nth_data(pidgin_conv_window_get_gtkconvs(win), |
8383 gtk_notebook_get_current_page(GTK_NOTEBOOK(win->notebook))); | 8438 gtk_notebook_get_current_page(GTK_NOTEBOOK(win->notebook))); |
8489 g_object_ref(gtkconv->tab_cont); | 8544 g_object_ref(gtkconv->tab_cont); |
8490 gtk_object_sink(GTK_OBJECT(gtkconv->tab_cont)); | 8545 gtk_object_sink(GTK_OBJECT(gtkconv->tab_cont)); |
8491 | 8546 |
8492 gtk_notebook_remove_page(GTK_NOTEBOOK(win->notebook), index); | 8547 gtk_notebook_remove_page(GTK_NOTEBOOK(win->notebook), index); |
8493 | 8548 |
8494 /* go back to tabless if need be */ | 8549 /* go back to tabless */ |
8495 if (pidgin_conv_window_get_gtkconv_count(win) <= 2) { | 8550 if (pidgin_conv_window_get_gtkconv_count(win) <= 2) { |
8496 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), | 8551 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), FALSE); |
8497 purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/tabs")); | |
8498 } | 8552 } |
8499 | 8553 |
8500 win->gtkconvs = g_list_remove(win->gtkconvs, gtkconv); | 8554 win->gtkconvs = g_list_remove(win->gtkconvs, gtkconv); |
8555 | |
8556 if (!win->gtkconvs || !win->gtkconvs->next) | |
8557 gtk_notebook_set_show_tabs(win->notebook, FALSE); | |
8501 | 8558 |
8502 if (!win->gtkconvs && win != hidden_convwin) | 8559 if (!win->gtkconvs && win != hidden_convwin) |
8503 pidgin_conv_window_destroy(win); | 8560 pidgin_conv_window_destroy(win); |
8504 } | 8561 } |
8505 | 8562 |