--- np2/x11/gtk/Attic/gtk_main.c 2004/01/23 14:35:46 1.3 +++ np2/x11/gtk/Attic/gtk_main.c 2005/03/12 12:36:40 1.10 @@ -10,8 +10,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 @@ -38,13 +36,12 @@ #include "mousemng.h" #include "scrnmng.h" #include "soundmng.h" +#include "taskmng.h" #include "gtk/xnp2.h" #include "gtk/gtk_keyboard.h" #include "gtk/gtk_menu.h" -#include - #include "resources/np2.xbm" @@ -66,6 +63,23 @@ /* + - Signal: gboolean GtkWidget::configure_event(GtkWidget *widget, + GdkEventConfigure *event, gpointer user_data) +*/ +static gboolean +configure(GtkWidget *w, GdkEventConfigure *ev, gpointer p) +{ + + UNUSED(ev); + 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, GdkEventExpose *event, gpointer user_data) */ @@ -76,13 +90,10 @@ expose(GtkWidget *w, GdkEventExpose *ev, UNUSED(w); UNUSED(p); - if (ev->type == GDK_EXPOSE) { - if (ev->count == 0) { - scrndraw_redraw(); - } - return TRUE; + if (ev->count == 0) { + scrndraw_redraw(); } - return FALSE; + return TRUE; } /* @@ -96,14 +107,11 @@ key_press(GtkWidget *w, GdkEventKey *ev, UNUSED(w); UNUSED(p); - if (ev->type == GDK_KEY_PRESS) { - if ((ev->keyval == GDK_F12) && (np2oscfg.F12KEY == 0)) - xmenu_toggle_item(MOUSE_MODE, !np2oscfg.MOUSE_SW, TRUE); - else - gtkkbd_keydown(ev->keyval); - return TRUE; - } - return FALSE; + if ((ev->keyval == GDK_F12) && (np2oscfg.F12KEY == 0)) + xmenu_toggle_item(MOUSE_MODE, !np2oscfg.MOUSE_SW, TRUE); + else + gtkkbd_keydown(ev->keyval); + return TRUE; } /* @@ -117,12 +125,9 @@ key_release(GtkWidget *w, GdkEventKey *e UNUSED(w); UNUSED(p); - if (ev->type == GDK_KEY_RELEASE) { - if ((ev->keyval != GDK_F12) || (np2oscfg.F12KEY != 0)) - gtkkbd_keyup(ev->keyval); - return TRUE; - } - return FALSE; + if ((ev->keyval != GDK_F12) || (np2oscfg.F12KEY != 0)) + gtkkbd_keyup(ev->keyval); + return TRUE; } /* @@ -136,23 +141,20 @@ button_press(GtkWidget *w, GdkEventButto UNUSED(w); UNUSED(p); - if (ev->type == GDK_BUTTON_PRESS) { - switch (ev->button) { - case 1: - mouse_btn(MOUSE_LEFTDOWN); - break; - - case 2: - xmenu_toggle_item(MOUSE_MODE, !np2oscfg.MOUSE_SW, TRUE); - break; - - case 3: - mouse_btn(MOUSE_RIGHTDOWN); - break; - } - return TRUE; + switch (ev->button) { + case 1: + mouse_btn(MOUSE_LEFTDOWN); + break; + + case 2: + xmenu_toggle_item(MOUSE_MODE, !np2oscfg.MOUSE_SW, TRUE); + break; + + case 3: + mouse_btn(MOUSE_RIGHTDOWN); + break; } - return FALSE; + return TRUE; } /* @@ -166,40 +168,19 @@ button_release(GtkWidget *w, GdkEventBut UNUSED(w); UNUSED(p); - if (ev->type == GDK_BUTTON_RELEASE) { - switch (ev->button) { - case 1: - mouse_btn(MOUSE_LEFTUP); - break; - - case 2: - break; - - case 3: - mouse_btn(MOUSE_RIGHTUP); - break; - } - return TRUE; - } - return FALSE; -} - -/* - - Signal: gboolean GtkWidget::enter_notify_event (GtkWidget *widget, - GdkEventCrossing *event, gpointer user_data) -*/ -static gboolean -enter_notify(GtkWidget *w, GdkEventCrossing *ev, gpointer p) -{ - - UNUSED(w); - UNUSED(p); - - if (ev->type == GDK_ENTER_NOTIFY) { - scrndraw_redraw(); - return TRUE; + switch (ev->button) { + case 1: + mouse_btn(MOUSE_LEFTUP); + break; + + case 2: + break; + + case 3: + mouse_btn(MOUSE_RIGHTUP); + break; } - return FALSE; + return TRUE; } @@ -217,37 +198,15 @@ set_icon_bitmap(GtkWidget *w) gdk_window_set_icon(w->window, NULL, icon_pixmap, NULL); } -#if 0 -static GtkWidget* -create_pixmap(GtkWidget *widget, gchar **data) -{ - GtkWidget *pixmap; - GdkColormap *colormap; - GdkPixmap *gdkpixmap; - GdkBitmap *mask; - - colormap = gtk_widget_get_colormap(widget); - gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d( - NULL, colormap, &mask, NULL, data); - if (gdkpixmap == NULL) { - g_warning("Couldn't create pixmap."); - return NULL; - } - - pixmap = gtk_pixmap_new(gdkpixmap, mask); - gdk_pixmap_unref(gdkpixmap); - gdk_bitmap_unref(mask); - - return pixmap; -} -#endif - /* * idle process */ static int install_count = 0; static int idle_id; +#if defined(SUPPORT_JOYSTICK) +static int joymng_task_id; +#endif void install_idle_process(void) @@ -283,10 +242,17 @@ gui_gtk_get_toolkit(void) BOOL gui_gtk_arginit(int *argcp, char ***argvp) { + char tmp[MAX_PATH]; + char *homeenv; + + homeenv = getenv("HOME"); gtk_set_locale(); - gtk_rc_add_default_file(".np2rc"); gtk_init(argcp, argvp); + if (homeenv) { + g_snprintf(tmp, sizeof(tmp), "%s/.np2/gtkrc", homeenv); + gtk_rc_add_default_file(tmp); + } return SUCCESS; } @@ -296,49 +262,57 @@ gui_gtk_widget_create(void) { GtkWidget *main_vbox; GtkWidget *menubar; +#if (GTK_MAJOR_VERSION == 2) + gchar *accel = NULL; +#endif - /* ウィンドウ作成 */ - window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, TRUE); - gtk_window_set_title(GTK_WINDOW(window), np2oscfg.titles); - gtk_widget_add_events(window, EVENT_MASK); + main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_policy(GTK_WINDOW(main_window), FALSE, FALSE, TRUE); + gtk_window_set_title(GTK_WINDOW(main_window), np2oscfg.titles); + gtk_widget_add_events(main_window, EVENT_MASK); main_vbox = gtk_vbox_new(FALSE, 2); gtk_container_border_width(GTK_CONTAINER(main_vbox), 1); - gtk_container_add(GTK_CONTAINER(window), main_vbox); + gtk_container_add(GTK_CONTAINER(main_window), main_vbox); gtk_widget_show(main_vbox); - /* メニューバー */ - menubar = create_menu(window); + menubar = create_menu(); gtk_box_pack_start(GTK_BOX(main_vbox), menubar, FALSE, TRUE, 0); gtk_widget_show(menubar); - /* 画面領域 */ drawarea = gtk_drawing_area_new(); gtk_drawing_area_size(GTK_DRAWING_AREA(drawarea), 640, 400); gtk_box_pack_start(GTK_BOX(main_vbox), drawarea, FALSE, TRUE, 0); gtk_widget_show(drawarea); - gtk_widget_realize(window); - set_icon_bitmap(window); +#if (GTK_MAJOR_VERSION == 2) + g_object_get(gtk_widget_get_settings(main_window), + "gtk-menu-bar-accel", &accel, NULL); + if (accel) { + g_object_set(gtk_widget_get_settings(main_window), + "gtk-menu-bar-accel", "Menu", NULL); + g_free(accel); + } +#endif + + gtk_widget_realize(main_window); + set_icon_bitmap(main_window); - /* setup signal */ - gtk_signal_connect(GTK_OBJECT(window), "destroy", + gtk_signal_connect(GTK_OBJECT(main_window), "destroy", GTK_SIGNAL_FUNC(gtk_main_quit), "WM destroy"); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + gtk_signal_connect(GTK_OBJECT(main_window), "key_press_event", GTK_SIGNAL_FUNC(key_press), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_release_event", + gtk_signal_connect(GTK_OBJECT(main_window), "key_release_event", GTK_SIGNAL_FUNC(key_release), NULL); - gtk_signal_connect(GTK_OBJECT(window), "button_press_event", + gtk_signal_connect(GTK_OBJECT(main_window), "button_press_event", GTK_SIGNAL_FUNC(button_press), NULL); - gtk_signal_connect(GTK_OBJECT(window), "button_release_event", + gtk_signal_connect(GTK_OBJECT(main_window), "button_release_event", GTK_SIGNAL_FUNC(button_release), NULL); - /* setup drawarea signal */ + gtk_signal_connect(GTK_OBJECT(drawarea), "configure_event", + GTK_SIGNAL_FUNC(configure), NULL); gtk_signal_connect(GTK_OBJECT(drawarea), "expose_event", GTK_SIGNAL_FUNC(expose), NULL); - gtk_signal_connect(GTK_OBJECT(drawarea), "enter_notify_event", - GTK_SIGNAL_FUNC(enter_notify), NULL); } static void @@ -352,13 +326,16 @@ void gui_gtk_widget_show(void) { - gtk_widget_show(window); + gtk_widget_show(main_window); } void gui_gtk_widget_mainloop(void) { +#if defined(SUPPORT_JOYSTICK) + joymng_task_id = gtk_idle_add((GtkFunction)joymng_update_task, NULL); +#endif install_idle_process(); gtk_main(); uninstall_idle_process(); @@ -368,6 +345,10 @@ void gui_gtk_widget_quit(void) { +#if defined(SUPPORT_JOYSTICK) + gtk_idle_remove(joymng_task_id); +#endif + taskmng_exit(); gtk_main_quit(); } @@ -375,22 +356,24 @@ void gui_gtk_event_process(void) { - /* XXX: Nothing to do */ + if (taskmng_isavail() && gdk_events_pending()) { + gtk_main_iteration_do(FALSE); + } } void gui_gtk_set_window_title(const char* str) { - gtk_window_set_title(GTK_WINDOW(window), str); + gtk_window_set_title(GTK_WINDOW(main_window), str); } void gui_gtk_messagebox(const char *title, const char *msg) { - printf("%s\n", title); - printf(msg); + UNUSED(title); + g_message(msg); } /* toolkit data */