Mercurial > pidgin
comparison finch/libgnt/gntmain.c @ 16888:d2904afe89e2
Ask before exiting when ctrl+c is pressed.
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Fri, 04 May 2007 15:10:57 +0000 |
parents | d0f9b2b217cf |
children | a19b8d71f868 |
comparison
equal
deleted
inserted
replaced
16887:afa0a7b053b1 | 16888:d2904afe89e2 |
---|---|
10 #include <sys/types.h> | 10 #include <sys/types.h> |
11 #include <sys/wait.h> | 11 #include <sys/wait.h> |
12 | 12 |
13 #include "gnt.h" | 13 #include "gnt.h" |
14 #include "gntbox.h" | 14 #include "gntbox.h" |
15 #include "gntbutton.h" | |
15 #include "gntcolors.h" | 16 #include "gntcolors.h" |
16 #include "gntclipboard.h" | 17 #include "gntclipboard.h" |
17 #include "gntkeys.h" | 18 #include "gntkeys.h" |
19 #include "gntlabel.h" | |
18 #include "gntmenu.h" | 20 #include "gntmenu.h" |
19 #include "gntstyle.h" | 21 #include "gntstyle.h" |
20 #include "gnttree.h" | 22 #include "gnttree.h" |
21 #include "gntutils.h" | 23 #include "gntutils.h" |
24 #include "gntwindow.h" | |
22 #include "gntwm.h" | 25 #include "gntwm.h" |
23 | 26 |
24 #include <panel.h> | 27 #include <panel.h> |
25 | 28 |
26 #include <stdio.h> | 29 #include <stdio.h> |
301 perror(errmsg); | 304 perror(errmsg); |
302 } | 305 } |
303 } | 306 } |
304 | 307 |
305 static void | 308 static void |
309 exit_confirmed(gpointer null) | |
310 { | |
311 gnt_bindable_perform_action_named(GNT_BINDABLE(wm), "wm-quit", NULL); | |
312 } | |
313 | |
314 static void | |
315 exit_win_close(GntWidget *w, GntWidget **win) | |
316 { | |
317 *win = NULL; | |
318 } | |
319 | |
320 static void | |
321 ask_before_exit() | |
322 { | |
323 static GntWidget *win = NULL; | |
324 GntWidget *bbox, *button; | |
325 | |
326 if (win) | |
327 goto raise; | |
328 | |
329 win = gnt_vwindow_new(FALSE); | |
330 gnt_box_add_widget(GNT_BOX(win), gnt_label_new("Are you sure you want to quit?")); | |
331 gnt_box_set_title(GNT_BOX(win), "Quit?"); | |
332 gnt_box_set_alignment(GNT_BOX(win), GNT_ALIGN_MID); | |
333 g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(exit_win_close), &win); | |
334 | |
335 bbox = gnt_hbox_new(FALSE); | |
336 gnt_box_add_widget(GNT_BOX(win), bbox); | |
337 | |
338 button = gnt_button_new("Quit"); | |
339 g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(exit_confirmed), NULL); | |
340 gnt_box_add_widget(GNT_BOX(bbox), button); | |
341 | |
342 button = gnt_button_new("Cancel"); | |
343 g_signal_connect_swapped(G_OBJECT(button), "activate", G_CALLBACK(gnt_widget_destroy), win); | |
344 gnt_box_add_widget(GNT_BOX(bbox), button); | |
345 | |
346 gnt_widget_show(win); | |
347 raise: | |
348 gnt_wm_raise_window(wm, win); | |
349 } | |
350 | |
351 static void | |
306 sighandler(int sig) | 352 sighandler(int sig) |
307 { | 353 { |
308 switch (sig) { | 354 switch (sig) { |
309 #ifdef SIGWINCH | 355 #ifdef SIGWINCH |
310 case SIGWINCH: | 356 case SIGWINCH: |
316 #endif | 362 #endif |
317 case SIGCHLD: | 363 case SIGCHLD: |
318 clean_pid(); | 364 clean_pid(); |
319 signal(SIGCHLD, sighandler); | 365 signal(SIGCHLD, sighandler); |
320 break; | 366 break; |
367 case SIGINT: | |
368 ask_before_exit(); | |
369 signal(SIGINT, sighandler); | |
370 break; | |
321 } | 371 } |
322 } | 372 } |
323 | 373 |
324 static void | 374 static void |
325 init_wm() | 375 init_wm() |
385 | 435 |
386 #ifdef SIGWINCH | 436 #ifdef SIGWINCH |
387 signal(SIGWINCH, sighandler); | 437 signal(SIGWINCH, sighandler); |
388 #endif | 438 #endif |
389 signal(SIGCHLD, sighandler); | 439 signal(SIGCHLD, sighandler); |
440 signal(SIGINT, sighandler); | |
390 signal(SIGPIPE, SIG_IGN); | 441 signal(SIGPIPE, SIG_IGN); |
391 | 442 |
392 g_type_init(); | 443 g_type_init(); |
393 | 444 |
394 init_wm(); | 445 init_wm(); |