--- np2/x11/gtk2/gtk_main.c 2004/07/14 16:01:40 1.1 +++ np2/x11/gtk2/gtk_main.c 2007/01/23 15:48:20 1.7 @@ -1,4 +1,4 @@ -/* $Id: gtk_main.c,v 1.1 2004/07/14 16:01:40 monaka Exp $ */ +/* $Id: gtk_main.c,v 1.7 2007/01/23 15:48:20 monaka Exp $ */ /* * Copyright (c) 2004 NONAKA Kimihiro @@ -12,8 +12,6 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES @@ -64,36 +62,42 @@ | GDK_LEAVE_NOTIFY_MASK \ | GDK_EXPOSURE_MASK) - +/* + - Signal: gboolean GtkWidget::destroy_event (GtkWidget *widget, + GdkEventAny *event, gpointer user_data) +*/ static gboolean -destroy_evhandler(GtkWidget *w) +destroy_evhandler(GtkWidget *w, GdkEventAny *ev, gpointer p) { UNUSED(w); + UNUSED(ev); + UNUSED(p); + taskmng_exit(); toolkit_widget_quit(); + return TRUE; } /* - - Signal: gboolean GtkWidget::configure_event(GtkWidget *widget, + - Signal: gboolean GtkWidget::configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) */ static gboolean -configure_evhandler(GtkWidget *w, GdkEventConfigure *ev, gpointer user_data) +configure_evhandler(GtkWidget *w, GdkEventConfigure *ev, gpointer p) { UNUSED(ev); - UNUSED(user_data); + UNUSED(p); gdk_draw_rectangle(w->window, w->style->black_gc, TRUE, 0, 0, w->allocation.width, w->allocation.height); - return TRUE; } /* - - Signal: gboolean GtkWidget::expose_event(GtkWidget *widget, + - Signal: gboolean GtkWidget::expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) */ static gboolean @@ -120,7 +124,12 @@ key_press_evhandler(GtkWidget *w, GdkEve UNUSED(w); UNUSED(p); - if ((ev->keyval == GDK_F12) && (np2oscfg.F12KEY == 0)) + if (ev->keyval == GDK_F11) { + if ((np2oscfg.F11KEY == 1) && (scrnmode & SCRNMODE_FULLSCREEN)) + xmenu_toggle_menu(); + 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); else gtkkbd_keydown(ev->keyval); @@ -196,10 +205,42 @@ button_release_evhandler(GtkWidget *w, G return TRUE; } +/* + - Signal: gboolean GtkWidget::motion_notify_event (GtkWidget *widget, + GdkEventMotion *event, gpointer user_data) +*/ +static gboolean +motion_notify_evhandler(GtkWidget *w, GdkEventMotion *ev, gpointer p) +{ + + UNUSED(w); + UNUSED(p); + + if ((scrnmode & SCRNMODE_FULLSCREEN) && (ev->y < 8.0)) + xmenu_show(); + + return TRUE; +} + /* * misc */ +static gint +main_widget_quit(gpointer p) +{ + BYTE orig_scrnmode; + + UNUSED(p); + + /* change to window mode */ + orig_scrnmode = scrnmode; + xmenu_select_screen(scrnmode & ~SCRNMODE_FULLSCREEN); + scrnmode = orig_scrnmode; + + return 0; +} + static void set_icon_bitmap(GtkWidget *w) { @@ -215,7 +256,7 @@ set_icon_bitmap(GtkWidget *w) /* * idle process */ -static int install_count = 0; +static volatile int install_count = 0; static guint idle_id; void @@ -277,9 +318,9 @@ gui_gtk_widget_create(void) GtkWidget *main_vbox; GtkWidget *menubar; gchar *accel = NULL; + gint root_x, root_y; main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_widget_set_double_buffered(GTK_WIDGET(main_window), FALSE); gtk_window_set_resizable(GTK_WINDOW(main_window), FALSE); gtk_window_set_title(GTK_WINDOW(main_window), np2oscfg.titles); gtk_widget_add_events(main_window, EVENT_MASK); @@ -293,7 +334,6 @@ gui_gtk_widget_create(void) gtk_widget_show(menubar); drawarea = gtk_drawing_area_new(); - gtk_widget_set_double_buffered(GTK_WIDGET(drawarea), FALSE); gtk_widget_set_size_request(GTK_WIDGET(drawarea), 640, 400); gtk_box_pack_end(GTK_BOX(main_vbox), drawarea, FALSE, TRUE, 0); gtk_widget_show(drawarea); @@ -307,6 +347,8 @@ gui_gtk_widget_create(void) } 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); g_signal_connect(GTK_OBJECT(main_window), "destroy", @@ -319,6 +361,8 @@ gui_gtk_widget_create(void) GTK_SIGNAL_FUNC(button_press_evhandler), NULL); g_signal_connect(GTK_OBJECT(main_window), "button_release_event", GTK_SIGNAL_FUNC(button_release_evhandler), NULL); + g_signal_connect(GTK_OBJECT(main_window), "motion_notify_event", + GTK_SIGNAL_FUNC(motion_notify_evhandler), NULL); g_signal_connect(GTK_OBJECT(drawarea), "configure_event", GTK_SIGNAL_FUNC(configure_evhandler), NULL); @@ -344,8 +388,8 @@ void gui_gtk_widget_mainloop(void) { - install_idle_process(); + gtk_quit_add(1, main_widget_quit, NULL); gtk_main(); uninstall_idle_process(); }