|
|
| version 1.3, 2007/01/02 14:37:29 | version 1.13, 2011/01/15 17:08:46 |
|---|---|
| Line 62 | Line 62 |
| | GDK_LEAVE_NOTIFY_MASK \ | | GDK_LEAVE_NOTIFY_MASK \ |
| | GDK_EXPOSURE_MASK) | | GDK_EXPOSURE_MASK) |
| /* | |
| - Signal: gboolean GtkWidget::destroy_event (GtkWidget *widget, | |
| GdkEventAny *event, gpointer user_data) | |
| */ | |
| static gboolean | static gboolean |
| destroy_evhandler(GtkWidget *w) | destroy_evhandler(GtkWidget *w, GdkEventAny *ev, gpointer p) |
| { | { |
| UNUSED(w); | |
| toolkit_widget_quit(); | toolkit_widget_quit(); |
| return TRUE; | return TRUE; |
| } | } |
| /* | /* |
| - Signal: gboolean GtkWidget::configure_event(GtkWidget *widget, | - Signal: gboolean GtkWidget::configure_event (GtkWidget *widget, |
| GdkEventConfigure *event, gpointer user_data) | GdkEventConfigure *event, gpointer user_data) |
| */ | */ |
| static gboolean | static gboolean |
| configure_evhandler(GtkWidget *w, GdkEventConfigure *ev, gpointer user_data) | configure_evhandler(GtkWidget *w, GdkEventConfigure *ev, gpointer p) |
| { | { |
| UNUSED(ev); | |
| UNUSED(user_data); | |
| gdk_draw_rectangle(w->window, w->style->black_gc, TRUE, | gdk_draw_rectangle(w->window, w->style->black_gc, TRUE, |
| 0, 0, w->allocation.width, w->allocation.height); | 0, 0, w->allocation.width, w->allocation.height); |
| return TRUE; | return TRUE; |
| } | } |
| /* | /* |
| - Signal: gboolean GtkWidget::expose_event(GtkWidget *widget, | - Signal: gboolean GtkWidget::expose_event (GtkWidget *widget, |
| GdkEventExpose *event, gpointer user_data) | GdkEventExpose *event, gpointer user_data) |
| */ | */ |
| static gboolean | static gboolean |
| expose_evhandler(GtkWidget *w, GdkEventExpose *ev, gpointer p) | expose_evhandler(GtkWidget *w, GdkEventExpose *ev, gpointer p) |
| { | { |
| UNUSED(w); | |
| UNUSED(p); | |
| if (ev->count == 0) { | if (ev->count == 0) { |
| scrndraw_redraw(); | scrndraw_redraw(); |
| } | } |
| Line 115 static gboolean | Line 110 static gboolean |
| key_press_evhandler(GtkWidget *w, GdkEventKey *ev, gpointer p) | key_press_evhandler(GtkWidget *w, GdkEventKey *ev, gpointer p) |
| { | { |
| UNUSED(w); | if (ev->keyval == GDK_F11) { |
| UNUSED(p); | if ((np2oscfg.F11KEY == 1) && (scrnmode & SCRNMODE_FULLSCREEN)) |
| xmenu_toggle_menu(); | |
| if ((ev->keyval == GDK_F12) && (np2oscfg.F12KEY == 0)) | else if (np2oscfg.F11KEY == 2) |
| xmenu_select_screen(scrnmode ^ SCRNMODE_FULLSCREEN); | |
| } else if ((ev->keyval == GDK_F12) && (np2oscfg.F12KEY == 0)) | |
| xmenu_toggle_item(NULL, "mousemode", !np2oscfg.MOUSE_SW); | xmenu_toggle_item(NULL, "mousemode", !np2oscfg.MOUSE_SW); |
| else | else |
| gtkkbd_keydown(ev->keyval); | gtkkbd_keydown(ev->keyval); |
| Line 133 static gboolean | Line 130 static gboolean |
| key_release_evhandler(GtkWidget *w, GdkEventKey *ev, gpointer p) | key_release_evhandler(GtkWidget *w, GdkEventKey *ev, gpointer p) |
| { | { |
| UNUSED(w); | |
| UNUSED(p); | |
| if ((ev->keyval != GDK_F12) || (np2oscfg.F12KEY != 0)) | if ((ev->keyval != GDK_F12) || (np2oscfg.F12KEY != 0)) |
| gtkkbd_keyup(ev->keyval); | gtkkbd_keyup(ev->keyval); |
| return TRUE; | return TRUE; |
| Line 149 static gboolean | Line 143 static gboolean |
| button_press_evhandler(GtkWidget *w, GdkEventButton *ev, gpointer p) | button_press_evhandler(GtkWidget *w, GdkEventButton *ev, gpointer p) |
| { | { |
| UNUSED(w); | |
| UNUSED(p); | |
| switch (ev->button) { | switch (ev->button) { |
| case 1: | case 1: |
| mouse_btn(MOUSE_LEFTDOWN); | mouse_btn(MOUSE_LEFTDOWN); |
| Line 176 static gboolean | Line 167 static gboolean |
| button_release_evhandler(GtkWidget *w, GdkEventButton *ev, gpointer p) | button_release_evhandler(GtkWidget *w, GdkEventButton *ev, gpointer p) |
| { | { |
| UNUSED(w); | |
| UNUSED(p); | |
| switch (ev->button) { | switch (ev->button) { |
| case 1: | case 1: |
| mouse_btn(MOUSE_LEFTUP); | mouse_btn(MOUSE_LEFTUP); |
| Line 195 button_release_evhandler(GtkWidget *w, G | Line 183 button_release_evhandler(GtkWidget *w, G |
| } | } |
| /* | /* |
| - Signal: gboolean GtkWidget::window_state_event (GtkWidget *widget, | - Signal: gboolean GtkWidget::motion_notify_event (GtkWidget *widget, |
| GdkEventWindowState *event, gpointer user_data) | GdkEventMotion *event, gpointer user_data) |
| */ | */ |
| static gboolean | static gboolean |
| window_state_evhandler(GtkWidget *w, GdkEventWindowState *ev, gpointer p) | motion_notify_evhandler(GtkWidget *w, GdkEventMotion *ev, gpointer p) |
| { | { |
| UNUSED(w); | if ((scrnmode & SCRNMODE_FULLSCREEN) && (ev->y < 8.0)) |
| UNUSED(p); | xmenu_show(); |
| if (ev->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) { | |
| /* Nothing to do. */ | |
| } | |
| return TRUE; | return TRUE; |
| } | } |
| Line 215 window_state_evhandler(GtkWidget *w, Gdk | Line 200 window_state_evhandler(GtkWidget *w, Gdk |
| /* | /* |
| * misc | * misc |
| */ | */ |
| static gint | |
| main_loop_quit(gpointer p) | |
| { | |
| scrnmng_fullscreen(0); | |
| return 0; | |
| } | |
| static void | static void |
| set_icon_bitmap(GtkWidget *w) | set_icon_bitmap(GtkWidget *w) |
| { | { |
| Line 230 set_icon_bitmap(GtkWidget *w) | Line 224 set_icon_bitmap(GtkWidget *w) |
| /* | /* |
| * idle process | * idle process |
| */ | */ |
| static int install_count = 0; | static volatile int install_count = 0; |
| static guint idle_id; | static guint idle_id; |
| void | void |
| Line 238 install_idle_process(void) | Line 232 install_idle_process(void) |
| { | { |
| if (install_count++ == 0) { | if (install_count++ == 0) { |
| idle_id = g_idle_add((GSourceFunc)mainloop, 0); | idle_id = g_idle_add((GSourceFunc)mainloop, NULL); |
| soundmng_play(); | soundmng_play(); |
| } | } |
| } | } |
| Line 257 uninstall_idle_process(void) | Line 251 uninstall_idle_process(void) |
| /* | /* |
| * toolkit | * toolkit |
| */ | */ |
| const char * | |
| gui_gtk_get_toolkit(void) | |
| { | |
| return "gtk"; | |
| } | |
| BOOL | BOOL |
| gui_gtk_arginit(int *argcp, char ***argvp) | gui_gtk_arginit(int *argcp, char ***argvp) |
| { | { |
| Line 292 gui_gtk_widget_create(void) | Line 279 gui_gtk_widget_create(void) |
| GtkWidget *main_vbox; | GtkWidget *main_vbox; |
| GtkWidget *menubar; | GtkWidget *menubar; |
| gchar *accel = NULL; | gchar *accel = NULL; |
| gint root_x, root_y; | |
| main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); | main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
| gtk_widget_set_double_buffered(GTK_WIDGET(main_window), FALSE); | // gtk_widget_set_double_buffered(GTK_WIDGET(main_window), FALSE); |
| gtk_window_set_resizable(GTK_WINDOW(main_window), FALSE); | gtk_window_set_resizable(GTK_WINDOW(main_window), FALSE); |
| gtk_window_set_title(GTK_WINDOW(main_window), np2oscfg.titles); | gtk_window_set_title(GTK_WINDOW(main_window), np2oscfg.titles); |
| gtk_widget_add_events(main_window, EVENT_MASK); | gtk_widget_add_events(main_window, EVENT_MASK); |
| Line 308 gui_gtk_widget_create(void) | Line 296 gui_gtk_widget_create(void) |
| gtk_widget_show(menubar); | gtk_widget_show(menubar); |
| drawarea = gtk_drawing_area_new(); | drawarea = gtk_drawing_area_new(); |
| gtk_widget_set_double_buffered(GTK_WIDGET(drawarea), FALSE); | // gtk_widget_set_double_buffered(GTK_WIDGET(drawarea), FALSE); |
| gtk_widget_set_size_request(GTK_WIDGET(drawarea), 640, 400); | gtk_widget_set_size_request(GTK_WIDGET(drawarea), 640, 400); |
| gtk_box_pack_end(GTK_BOX(main_vbox), drawarea, FALSE, TRUE, 0); | gtk_box_pack_end(GTK_BOX(main_vbox), drawarea, FALSE, TRUE, 0); |
| gtk_widget_show(drawarea); | gtk_widget_show(drawarea); |
| Line 322 gui_gtk_widget_create(void) | Line 310 gui_gtk_widget_create(void) |
| } | } |
| gtk_widget_realize(main_window); | gtk_widget_realize(main_window); |
| gdk_window_get_origin(main_window->window, &root_x, &root_y); | |
| gdk_window_reparent(main_window->window, NULL, root_x, root_y); | |
| set_icon_bitmap(main_window); | set_icon_bitmap(main_window); |
| g_signal_connect(GTK_OBJECT(main_window), "destroy", | g_signal_connect(GTK_OBJECT(main_window), "destroy", |
| GTK_SIGNAL_FUNC(destroy_evhandler), "WM destroy"); | G_CALLBACK(destroy_evhandler), (gpointer)"WM destroy"); |
| g_signal_connect(GTK_OBJECT(main_window), "key_press_event", | 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", | 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", | 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", | 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), "window_state_event", | g_signal_connect(GTK_OBJECT(main_window), "motion_notify_event", |
| GTK_SIGNAL_FUNC(window_state_evhandler), NULL); | G_CALLBACK(motion_notify_evhandler), NULL); |
| g_signal_connect(GTK_OBJECT(drawarea), "configure_event", | 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", | g_signal_connect(GTK_OBJECT(drawarea), "expose_event", |
| GTK_SIGNAL_FUNC(expose_evhandler), NULL); | G_CALLBACK(expose_evhandler), NULL); |
| } | |
| static void | |
| gui_gtk_terminate(void) | |
| { | |
| /* Nothing to do */ | |
| } | } |
| void | void |
| Line 361 void | Line 344 void |
| gui_gtk_widget_mainloop(void) | gui_gtk_widget_mainloop(void) |
| { | { |
| install_idle_process(); | install_idle_process(); |
| gtk_quit_add(1, main_loop_quit, NULL); | |
| gtk_main(); | gtk_main(); |
| uninstall_idle_process(); | uninstall_idle_process(); |
| } | } |
| Line 391 gui_gtk_set_window_title(const char* str | Line 374 gui_gtk_set_window_title(const char* str |
| gtk_window_set_title(GTK_WINDOW(main_window), str); | gtk_window_set_title(GTK_WINDOW(main_window), str); |
| } | } |
| void | int |
| gui_gtk_messagebox(const char *title, const char *msg) | 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; | |
| } | |
| /* toolkit data */ | dialog = gtk_message_dialog_new(GTK_WINDOW(main_window), |
| gui_toolkit_t gtk_toolkit = { | GTK_DIALOG_DESTROY_WITH_PARENT|GTK_DIALOG_MODAL, |
| gui_gtk_get_toolkit, | msgtype, btntype, msg); |
| gui_gtk_arginit, | gtk_window_set_title(GTK_WINDOW(dialog), title); |
| gui_gtk_terminate, | |
| gui_gtk_widget_create, | gtk_widget_show_all(dialog); |
| gui_gtk_widget_show, | |
| gui_gtk_widget_mainloop, | rv = gtk_dialog_run(GTK_DIALOG(dialog)); |
| gui_gtk_widget_quit, | switch (rv) { |
| gui_gtk_event_process, | case GTK_RESPONSE_OK: |
| gui_gtk_set_window_title, | retval = TK_MB_OK; |
| gui_gtk_messagebox, | break; |
| }; | |
| case GTK_RESPONSE_CANCEL: | |
| retval = TK_MB_CANCEL; | |
| break; | |
| 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; | |
| } |