comparison src/gtkconv.c @ 12085:9b886b6e3002

[gaim-migrate @ 14382] Patch from Sadrul Habib Chowdhury to add tab management options (close, detach, close other, close all) to the tab right-click menu for conversations. committer: Tailor Script <tailor@pidgin.im>
author Gary Kramlich <grim@reaperworld.com>
date Mon, 14 Nov 2005 09:37:00 +0000
parents d4728e1abe7b
children 980c877bd238
comparison
equal deleted inserted replaced
12084:d4728e1abe7b 12085:9b886b6e3002
6222 6222
6223 gtkconv = GAIM_GTK_CONVERSATION(conv); 6223 gtkconv = GAIM_GTK_CONVERSATION(conv);
6224 6224
6225 stop_anim(NULL, gtkconv); 6225 stop_anim(NULL, gtkconv);
6226 } 6226 }
6227 static void
6228 close_window(GtkWidget *w, GaimGtkWindow *win)
6229 {
6230 close_win_cb(w, NULL, win);
6231 }
6232
6233 static void
6234 detach_tab_cb(GtkWidget *w, GObject *menu)
6235 {
6236 GaimGtkWindow *win, *new_window;
6237 GaimGtkConversation *gtkconv;
6238
6239 gtkconv = g_object_get_data(menu, "clicked_tab");
6240
6241 if (!gtkconv)
6242 return;
6243
6244 win = gaim_gtkconv_get_window(gtkconv);
6245 /* Nothing to do if there's only one tab in the window */
6246 if (gaim_gtk_conv_window_get_gtkconv_count(win) == 1)
6247 return;
6248
6249 gaim_gtk_conv_window_remove_gtkconv(win, gtkconv);
6250
6251 new_window = gaim_gtk_conv_window_new();
6252 gaim_gtk_conv_window_add_gtkconv(new_window, gtkconv);
6253 gaim_gtk_conv_window_show(new_window);
6254 }
6255
6256 static void
6257 close_others_cb(GtkWidget *w, GObject *menu)
6258 {
6259 GList *iter;
6260 GaimGtkConversation *gtkconv;
6261 GaimGtkWindow *win;
6262
6263 gtkconv = g_object_get_data(menu, "clicked_tab");
6264
6265 if (!gtkconv)
6266 return;
6267
6268 win = gaim_gtkconv_get_window(gtkconv);
6269
6270 for (iter = gaim_gtk_conv_window_get_gtkconvs(win); iter; )
6271 {
6272 GaimGtkConversation *gconv = iter->data;
6273 iter = iter->next;
6274
6275 if (gconv != gtkconv)
6276 {
6277 close_conv_cb(NULL, gconv);
6278 }
6279 }
6280 }
6281
6282 static void close_tab_cb(GtkWidget *w, GObject *menu)
6283 {
6284 GaimGtkConversation *gtkconv;
6285
6286 gtkconv = g_object_get_data(menu, "clicked_tab");
6287
6288 if (gtkconv)
6289 close_conv_cb(NULL, gtkconv);
6290 }
6291
6292 static gboolean
6293 right_click_menu_cb(GtkNotebook *notebook, GdkEventButton *event, GaimGtkWindow *win)
6294 {
6295 GtkWidget *item, *menu;
6296 GaimGtkConversation *gtkconv;
6297
6298 if (event->type != GDK_BUTTON_PRESS || event->button != 3)
6299 return FALSE;
6300
6301 gtkconv = gaim_gtk_conv_window_get_gtkconv_at_index(win,
6302 gaim_gtkconv_get_tab_at_xy(win, event->x, event->y, NULL));
6303
6304 if (g_object_get_data(G_OBJECT(notebook->menu), "clicked_tab"))
6305 {
6306 g_object_set_data(G_OBJECT(notebook->menu), "clicked_tab", gtkconv);
6307 return FALSE;
6308 }
6309
6310 g_object_set_data(G_OBJECT(notebook->menu), "clicked_tab", gtkconv);
6311
6312 menu = notebook->menu;
6313 gaim_separator(GTK_WIDGET(menu));
6314
6315 item = gtk_menu_item_new_with_label("Detach this tab");
6316 gtk_widget_show(item);
6317 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
6318 g_signal_connect(G_OBJECT(item), "activate",
6319 G_CALLBACK(detach_tab_cb), menu);
6320
6321 item = gtk_menu_item_new_with_label("Close this tab");
6322 gtk_widget_show(item);
6323 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
6324 g_signal_connect(G_OBJECT(item), "activate",
6325 G_CALLBACK(close_tab_cb), menu);
6326
6327 gaim_separator(menu);
6328
6329 item = gtk_menu_item_new_with_label("Close other tabs");
6330 gtk_widget_show(item);
6331 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
6332 g_signal_connect(G_OBJECT(item), "activate",
6333 G_CALLBACK(close_others_cb), menu);
6334
6335 item = gtk_menu_item_new_with_label("Close all tabs");
6336 gtk_widget_show(item);
6337 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
6338 g_signal_connect(G_OBJECT(item), "activate",
6339 G_CALLBACK(close_window), win);
6340
6341 return FALSE;
6342 }
6227 6343
6228 static void 6344 static void
6229 switch_conv_cb(GtkNotebook *notebook, GtkWidget *page, gint page_num, 6345 switch_conv_cb(GtkNotebook *notebook, GtkWidget *page, gint page_num,
6230 gpointer user_data) 6346 gpointer user_data)
6231 { 6347 {
6325 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(win->notebook), pos); 6441 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(win->notebook), pos);
6326 gtk_notebook_set_scrollable(GTK_NOTEBOOK(win->notebook), TRUE); 6442 gtk_notebook_set_scrollable(GTK_NOTEBOOK(win->notebook), TRUE);
6327 gtk_notebook_popup_enable(GTK_NOTEBOOK(win->notebook)); 6443 gtk_notebook_popup_enable(GTK_NOTEBOOK(win->notebook));
6328 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), FALSE); 6444 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), FALSE);
6329 gtk_notebook_set_show_border(GTK_NOTEBOOK(win->notebook), FALSE); 6445 gtk_notebook_set_show_border(GTK_NOTEBOOK(win->notebook), FALSE);
6446
6447 g_signal_connect(G_OBJECT(win->notebook), "button-press-event",
6448 G_CALLBACK(right_click_menu_cb), win);
6330 6449
6331 gtk_widget_show(win->notebook); 6450 gtk_widget_show(win->notebook);
6332 6451
6333 g_signal_connect(G_OBJECT(win->notebook), "switch_page", 6452 g_signal_connect(G_OBJECT(win->notebook), "switch_page",
6334 G_CALLBACK(before_switch_conv_cb), win); 6453 G_CALLBACK(before_switch_conv_cb), win);