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();