pidgin/gtkconv.c

changeset 19115
b2dab8f61898
parent 19096
2a05fac82021
parent 19092
4c226dbdf483
child 19116
0e0dbf69479d
equal deleted inserted replaced
19114:5b707fe77bcb 19115:b2dab8f61898
211 211
212 /************************************************************************** 212 /**************************************************************************
213 * Callbacks 213 * Callbacks
214 **************************************************************************/ 214 **************************************************************************/
215 215
216 static gint 216 static gboolean
217 close_conv_cb(GtkWidget *w, PidginConversation *gtkconv) 217 close_conv_cb(GtkWidget *w, GdkEventButton *event, PidginConversation *gtkconv)
218 { 218 {
219 GList *list = g_list_copy(gtkconv->convs); 219 GList *list = g_list_copy(gtkconv->convs);
220 220
221 g_list_foreach(list, (GFunc)purple_conversation_destroy, NULL); 221 g_list_foreach(list, (GFunc)purple_conversation_destroy, NULL);
222 g_list_free(list); 222 g_list_free(list);
1329 static void 1329 static void
1330 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget) 1330 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget)
1331 { 1331 {
1332 PidginWindow *win = data; 1332 PidginWindow *win = data;
1333 1333
1334 close_conv_cb(NULL, PIDGIN_CONVERSATION(pidgin_conv_window_get_active_conversation(win))); 1334 close_conv_cb(NULL, NULL, PIDGIN_CONVERSATION(pidgin_conv_window_get_active_conversation(win)));
1335 } 1335 }
1336 1336
1337 static void 1337 static void
1338 menu_logging_cb(gpointer data, guint action, GtkWidget *widget) 1338 menu_logging_cb(gpointer data, guint action, GtkWidget *widget)
1339 { 1339 {
6597 pidgin_gdk_pixbuf_make_round(scale); 6597 pidgin_gdk_pixbuf_make_round(scale);
6598 gtkconv->u.im->icon_container = gtk_vbox_new(FALSE, 0); 6598 gtkconv->u.im->icon_container = gtk_vbox_new(FALSE, 0);
6599 6599
6600 event = gtk_event_box_new(); 6600 event = gtk_event_box_new();
6601 gtk_container_add(GTK_CONTAINER(gtkconv->u.im->icon_container), event); 6601 gtk_container_add(GTK_CONTAINER(gtkconv->u.im->icon_container), event);
6602 gtk_event_box_set_visible_window(event, FALSE);
6602 gtk_widget_add_events(event, 6603 gtk_widget_add_events(event,
6603 GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK); 6604 GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK);
6604 g_signal_connect(G_OBJECT(event), "button-press-event", 6605 g_signal_connect(G_OBJECT(event), "button-press-event",
6605 G_CALLBACK(icon_menu), gtkconv); 6606 G_CALLBACK(icon_menu), gtkconv);
6606 g_signal_connect(G_OBJECT(event), "motion-notify-event", 6607 g_signal_connect(G_OBJECT(event), "motion-notify-event",
7493 7494
7494 warn_close_dialog = gtk_dialog_new_with_buttons( 7495 warn_close_dialog = gtk_dialog_new_with_buttons(
7495 _("Confirm close"), 7496 _("Confirm close"),
7496 GTK_WINDOW(gtkwin->window), GTK_DIALOG_MODAL, 7497 GTK_WINDOW(gtkwin->window), GTK_DIALOG_MODAL,
7497 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 7498 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
7498 PIDGIN_STOCK_CLOSE_TABS, GTK_RESPONSE_OK, NULL); 7499 GTK_STOCK_CLOSE, GTK_RESPONSE_OK, NULL);
7499 7500
7500 gtk_dialog_set_default_response(GTK_DIALOG(warn_close_dialog), 7501 gtk_dialog_set_default_response(GTK_DIALOG(warn_close_dialog),
7501 GTK_RESPONSE_OK); 7502 GTK_RESPONSE_OK);
7502 7503
7503 gtk_container_set_border_width(GTK_CONTAINER(warn_close_dialog), 7504 gtk_container_set_border_width(GTK_CONTAINER(warn_close_dialog),
7785 7786
7786 if (tab_clicked == -1) 7787 if (tab_clicked == -1)
7787 return FALSE; 7788 return FALSE;
7788 7789
7789 gtkconv = pidgin_conv_window_get_gtkconv_at_index(win, tab_clicked); 7790 gtkconv = pidgin_conv_window_get_gtkconv_at_index(win, tab_clicked);
7790 close_conv_cb(NULL, gtkconv); 7791 close_conv_cb(NULL, NULL, gtkconv);
7791 return TRUE; 7792 return TRUE;
7792 } 7793 }
7793 7794
7794 7795
7795 if (e->button != 1 || e->type != GDK_BUTTON_PRESS) 7796 if (e->button != 1 || e->type != GDK_BUTTON_PRESS)
8044 PidginConversation *gconv = iter->data; 8045 PidginConversation *gconv = iter->data;
8045 iter = iter->next; 8046 iter = iter->next;
8046 8047
8047 if (gconv != gtkconv) 8048 if (gconv != gtkconv)
8048 { 8049 {
8049 close_conv_cb(NULL, gconv); 8050 close_conv_cb(NULL, NULL, gconv);
8050 } 8051 }
8051 } 8052 }
8052 } 8053 }
8053 8054
8054 static void close_tab_cb(GtkWidget *w, GObject *menu) 8055 static void close_tab_cb(GtkWidget *w, GObject *menu)
8056 PidginConversation *gtkconv; 8057 PidginConversation *gtkconv;
8057 8058
8058 gtkconv = g_object_get_data(menu, "clicked_tab"); 8059 gtkconv = g_object_get_data(menu, "clicked_tab");
8059 8060
8060 if (gtkconv) 8061 if (gtkconv)
8061 close_conv_cb(NULL, gtkconv); 8062 close_conv_cb(NULL, NULL, gtkconv);
8062 } 8063 }
8063 8064
8064 static gboolean 8065 static gboolean
8065 right_click_menu_cb(GtkNotebook *notebook, GdkEventButton *event, PidginWindow *win) 8066 right_click_menu_cb(GtkNotebook *notebook, GdkEventButton *event, PidginWindow *win)
8066 { 8067 {
8563 if (win->gtkconvs && win->gtkconvs->next && win->gtkconvs->next->next == NULL) 8564 if (win->gtkconvs && win->gtkconvs->next && win->gtkconvs->next->next == NULL)
8564 pidgin_conv_tab_pack(win, ((PidginConversation*)win->gtkconvs->data)); 8565 pidgin_conv_tab_pack(win, ((PidginConversation*)win->gtkconvs->data));
8565 8566
8566 8567
8567 /* Close button. */ 8568 /* Close button. */
8568 gtkconv->close = gtk_button_new(); 8569 gtkconv->close = gtk_event_box_new();
8569 gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &close_button_width, &close_button_height); 8570 gtk_event_box_set_visible_window(gtkconv->close, FALSE);
8570 if (gtk_check_version(2, 4, 2) == NULL) { 8571 close_image = gtk_label_new(NULL);
8571 /* Need to account for extra padding around the gtkbutton */ 8572 gtk_label_set_markup(GTK_LABEL(close_image),"<b>×</b>");
8572 gtk_widget_style_get(GTK_WIDGET(gtkconv->close),
8573 "focus-line-width", &focus_width,
8574 "focus-padding", &focus_pad,
8575 NULL);
8576 close_button_width += (focus_width + focus_pad) * 2;
8577 close_button_height += (focus_width + focus_pad) * 2;
8578 }
8579 gtk_widget_set_size_request(GTK_WIDGET(gtkconv->close),
8580 close_button_width, close_button_height);
8581
8582 gtk_button_set_relief(GTK_BUTTON(gtkconv->close), GTK_RELIEF_NONE);
8583 close_image = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
8584 gtk_widget_show(close_image); 8573 gtk_widget_show(close_image);
8585 gtk_container_add(GTK_CONTAINER(gtkconv->close), close_image); 8574 gtk_container_add(GTK_CONTAINER(gtkconv->close), close_image);
8586 gtk_tooltips_set_tip(gtkconv->tooltips, gtkconv->close, 8575 gtk_tooltips_set_tip(gtkconv->tooltips, gtkconv->close,
8587 _("Close conversation"), NULL); 8576 _("Close conversation"), NULL);
8588 8577
8589 g_signal_connect(G_OBJECT(gtkconv->close), "clicked", 8578 g_signal_connect(G_OBJECT(gtkconv->close), "button-press-event",
8590 G_CALLBACK(close_conv_cb), gtkconv); 8579 G_CALLBACK(close_conv_cb), gtkconv);
8591 8580
8592 #if !GTK_CHECK_VERSION(2,6,0) 8581 #if !GTK_CHECK_VERSION(2,6,0)
8593 /* 8582 /*
8594 * I love Galeon. They have a fix for that stupid annoying visible 8583 * I love Galeon. They have a fix for that stupid annoying visible

mercurial