--- np2/x11/gtk2/gtk_main.c 2007/01/23 16:24:36 1.8 +++ np2/x11/gtk2/gtk_main.c 2009/03/05 11:50:39 1.11 @@ -1,4 +1,4 @@ -/* $Id: gtk_main.c,v 1.8 2007/01/23 16:24:36 monaka Exp $ */ +/* $Id: gtk_main.c,v 1.11 2009/03/05 11:50:39 monaka Exp $ */ /* * Copyright (c) 2004 NONAKA Kimihiro @@ -74,7 +74,6 @@ destroy_evhandler(GtkWidget *w, GdkEvent UNUSED(ev); UNUSED(p); - taskmng_exit(); toolkit_widget_quit(); return TRUE; @@ -227,16 +226,12 @@ motion_notify_evhandler(GtkWidget *w, Gd * misc */ static gint -main_widget_quit(gpointer p) +main_loop_quit(gpointer p) { - BYTE orig_scrnmode; UNUSED(p); - /* change to window mode */ - orig_scrnmode = scrnmode; - xmenu_select_screen(scrnmode & ~SCRNMODE_FULLSCREEN); - scrnmode = orig_scrnmode; + scrnmng_fullscreen(0); return 0; } @@ -283,13 +278,6 @@ uninstall_idle_process(void) /* * toolkit */ -const char * -gui_gtk_get_toolkit(void) -{ - - return "gtk"; -} - BOOL gui_gtk_arginit(int *argcp, char ***argvp) { @@ -354,29 +342,22 @@ gui_gtk_widget_create(void) set_icon_bitmap(main_window); g_signal_connect(GTK_OBJECT(main_window), "destroy", - GTK_SIGNAL_FUNC(destroy_evhandler), "WM destroy"); + G_CALLBACK(destroy_evhandler), "WM destroy"); g_signal_connect(GTK_OBJECT(main_window), "key_press_event", - GTK_SIGNAL_FUNC(key_press_evhandler), NULL); + G_CALLBACK(key_press_evhandler), NULL); g_signal_connect(GTK_OBJECT(main_window), "key_release_event", - GTK_SIGNAL_FUNC(key_release_evhandler), NULL); + G_CALLBACK(key_release_evhandler), NULL); g_signal_connect(GTK_OBJECT(main_window), "button_press_event", - GTK_SIGNAL_FUNC(button_press_evhandler), NULL); + G_CALLBACK(button_press_evhandler), NULL); g_signal_connect(GTK_OBJECT(main_window), "button_release_event", - GTK_SIGNAL_FUNC(button_release_evhandler), NULL); + G_CALLBACK(button_release_evhandler), NULL); g_signal_connect(GTK_OBJECT(main_window), "motion_notify_event", - GTK_SIGNAL_FUNC(motion_notify_evhandler), NULL); + G_CALLBACK(motion_notify_evhandler), NULL); g_signal_connect(GTK_OBJECT(drawarea), "configure_event", - GTK_SIGNAL_FUNC(configure_evhandler), NULL); + G_CALLBACK(configure_evhandler), NULL); g_signal_connect(GTK_OBJECT(drawarea), "expose_event", - GTK_SIGNAL_FUNC(expose_evhandler), NULL); -} - -static void -gui_gtk_terminate(void) -{ - - /* Nothing to do */ + G_CALLBACK(expose_evhandler), NULL); } void @@ -391,7 +372,7 @@ gui_gtk_widget_mainloop(void) { install_idle_process(); - gtk_quit_add(1, main_widget_quit, NULL); + gtk_quit_add(1, main_loop_quit, NULL); gtk_main(); uninstall_idle_process(); } @@ -420,23 +401,83 @@ gui_gtk_set_window_title(const char* str gtk_window_set_title(GTK_WINDOW(main_window), str); } -void -gui_gtk_messagebox(const char *title, const char *msg) +int +gui_gtk_msgbox(const char *title, const char *msg, UINT flags) { + GtkWidget *dialog; + GtkMessageType msgtype; + GtkButtonsType btntype; + int retval; + int rv; - g_message("%s:\n%s", title, msg); -} + uninstall_idle_process(); + + switch (flags & TK_MB_BTN_MASK) { + default: + btntype = GTK_BUTTONS_OK; + break; + + case TK_MB_OK: + btntype = GTK_BUTTONS_OK; + break; + + case TK_MB_CANCEL: + btntype = GTK_BUTTONS_CANCEL; + break; + + case TK_MB_OKCANCEL: + btntype = GTK_BUTTONS_OK_CANCEL; + break; + + case TK_MB_YESNO: + btntype = GTK_BUTTONS_YES_NO; + break; + } + + if (flags & TK_MB_ICON_INFO) { + msgtype = GTK_MESSAGE_INFO; + } else if (flags & TK_MB_ICON_WARNING) { + msgtype = GTK_MESSAGE_WARNING; + } else if (flags & TK_MB_ICON_ERROR) { + msgtype = GTK_MESSAGE_ERROR; + } else if (flags & TK_MB_ICON_QUESTION) { + msgtype = GTK_MESSAGE_QUESTION; + } else { + msgtype = GTK_MESSAGE_OTHER; + } + + dialog = gtk_message_dialog_new(GTK_WINDOW(main_window), + GTK_DIALOG_DESTROY_WITH_PARENT|GTK_DIALOG_MODAL, + msgtype, btntype, msg); + gtk_window_set_title(GTK_WINDOW(dialog), title); + + gtk_widget_show_all(dialog); + + rv = gtk_dialog_run(GTK_DIALOG(dialog)); + switch (rv) { + case GTK_RESPONSE_OK: + retval = TK_MB_OK; + break; + + case GTK_RESPONSE_CANCEL: + retval = TK_MB_CANCEL; + break; -/* toolkit data */ -gui_toolkit_t gtk_toolkit = { - gui_gtk_get_toolkit, - gui_gtk_arginit, - gui_gtk_terminate, - gui_gtk_widget_create, - gui_gtk_widget_show, - gui_gtk_widget_mainloop, - gui_gtk_widget_quit, - gui_gtk_event_process, - gui_gtk_set_window_title, - gui_gtk_messagebox, -}; + case GTK_RESPONSE_YES: + retval = TK_MB_YES; + break; + + case GTK_RESPONSE_NO: + retval = TK_MB_NO; + break; + + default: + retval = 0; /* XXX */ + break; + } + + gtk_widget_destroy(dialog); + install_idle_process(); + + return retval; +}