Mercurial > pidgin.yaz
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); |