From 3e75bbf53771b0bfc1c861672dc4cadf64b0d64d Mon Sep 17 00:00:00 2001 From: ksterker Date: Tue, 6 Oct 2009 23:15:10 +0200 Subject: [PATCH] REPLACED deprectated GdkFont with Pango ADDED OSX menu bar integration to dlgedit --- src/dlgedit/Makefile.am | 4 +- src/dlgedit/dlg_circle.cc | 14 ++-- src/dlgedit/dlg_module.cc | 31 ++++++--- src/dlgedit/gui_dlgedit.cc | 130 +++++++++++++++++++++-------------- src/dlgedit/gui_dlgedit.h | 1 + src/dlgedit/gui_resources.cc | 6 +- src/dlgedit/gui_resources.h | 7 +- 7 files changed, 121 insertions(+), 72 deletions(-) diff --git a/src/dlgedit/Makefile.am b/src/dlgedit/Makefile.am index 49e19b6..d6164fe 100644 --- a/src/dlgedit/Makefile.am +++ b/src/dlgedit/Makefile.am @@ -80,8 +80,8 @@ dlgedit_SOURCES = \ main.cc INCLUDES = -I@top_srcdir@/src/common -dlgedit_CXXFLAGS = -D_VERSION_=\"0.9pre\" $(GTK_CFLAGS) $(ADONTHELL_CFLAGS) -dlgedit_LDADD = ../common/libcommon.a $(GTK_LIBS) $(ADONTHELL_LIBS) +dlgedit_CXXFLAGS = -D_VERSION_=\"0.9pre\" $(GTK_CFLAGS) $(ADONTHELL_CFLAGS) ${IGE_MAC_CFLAGS} +dlgedit_LDADD = ../common/libcommon.a $(GTK_LIBS) $(ADONTHELL_LIBS) ${IGE_MAC_LIBS} $(srcdir)/lex.loadlg.cc: $(top_srcdir)/src/dlgedit/loadlg.l flex -o$(srcdir)/lex.loadlg.cc $< diff --git a/src/dlgedit/dlg_circle.cc b/src/dlgedit/dlg_circle.cc index 9b4bd75..437b73d 100644 --- a/src/dlgedit/dlg_circle.cc +++ b/src/dlgedit/dlg_circle.cc @@ -111,12 +111,16 @@ void DlgCircle::draw (GdkPixmap *surface, DlgPoint &os, GtkWidget *widget) if (entry_->loop ()) g_string_append_c (code, 'o'); // get the font to use - GdkFont *font = GuiResources::font (); - + PangoLayout *font = GuiResources::font (); + pango_layout_set_text (font, code->str, -1); + // place text in circles center - int x = position.x () + (width () - gdk_string_width (font, code->str)) / 2; - int y = position.y () + (height () + 1 + gdk_string_height (font, code->str)) / 2; - gdk_draw_string (surface, font, gc, x, y, code->str); + int w, h; + pango_layout_get_pixel_size (font, &w, &h); + + int x = position.x () + (width () - w) / 2; + int y = position.y () + (height () + 1 - h) / 2; + gdk_draw_layout (surface, gc, x, y, font); g_string_free (code, TRUE); } diff --git a/src/dlgedit/dlg_module.cc b/src/dlgedit/dlg_module.cc index dc68380..224916c 100644 --- a/src/dlgedit/dlg_module.cc +++ b/src/dlgedit/dlg_module.cc @@ -81,9 +81,14 @@ void DlgModule::clear () // calculate shape of sub-dialogue void DlgModule::initShape (const DlgPoint ¢er) { + int width; + // calculate width of the module icon - GdkFont *font = GuiResources::font (); - int width = gdk_string_width (font, name ().c_str ()) + 10; + PangoLayout *font = GuiResources::font (); + pango_layout_set_text (font, name().c_str(), -1); + pango_layout_get_pixel_size (font, &width, NULL); + + width += 10; // align module to the (imaginary) grid and set shape top_left = DlgPoint (center.x (), center.y ()); @@ -288,12 +293,16 @@ void DlgModule::draw (GdkPixmap *surface, DlgPoint &offset, GtkWidget *widget) gdk_draw_rectangle (surface, gc, FALSE, position.x (), position.y (), width (), height ()); // get the font to draw name - GdkFont *font = GuiResources::font (); - + PangoLayout *font = GuiResources::font (); + pango_layout_set_text (font, name().c_str(), -1); + // place text in module's center + int h; + pango_layout_get_pixel_size (font, NULL, &h); + int x = position.x () + 5; - int y = position.y () + (height () + gdk_string_height (font, name ().c_str ())) / 2; - gdk_draw_string (surface, font, gc, x, y, name ().c_str ()); + int y = position.y () + (height () + h) / 2; + gdk_draw_layout (surface, gc, x, y, font); // Update the drawing area update (widget, area); @@ -481,13 +490,17 @@ void DlgModule::loadSubdialogue () case LOAD_POS: { int x, y; - GdkFont *font = GuiResources::font (); - int width = gdk_string_width (font, name ().c_str ()) + 10; + int width; + + PangoLayout *font = GuiResources::font (); + pango_layout_set_text (font, name().c_str(), -1); + pango_layout_get_pixel_size (font, &width, NULL); + if (parse_dlgfile (s, n) == LOAD_NUM) x = n; if (parse_dlgfile (s, n) == LOAD_NUM) y = n; top_left = DlgPoint (x, y); - bottom_right = DlgPoint (x + width, y + 20); + bottom_right = DlgPoint (x + width + 10, y + 20); } default: break; diff --git a/src/dlgedit/gui_dlgedit.cc b/src/dlgedit/gui_dlgedit.cc index 4bd137e..5e7935a 100644 --- a/src/dlgedit/gui_dlgedit.cc +++ b/src/dlgedit/gui_dlgedit.cc @@ -30,6 +30,10 @@ #include #endif +#ifdef MAC_INTEGRATION +#include +#endif + #ifdef WIN32 #define WIN32_LEAN_AND_MEAN #include @@ -134,7 +138,7 @@ GuiDlgedit::GuiDlgedit () // Main Window wnd = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_usize (GTK_WIDGET (wnd), 800, 600); - gtk_signal_connect (GTK_OBJECT (wnd), "delete_event", GTK_SIGNAL_FUNC (on_widget_destroy), NULL); + g_signal_connect (G_OBJECT (wnd), "delete_event", G_CALLBACK (on_widget_destroy), NULL); // Menu Accelerators GtkAccelGroup *accel_group = gtk_accel_group_new (); @@ -156,44 +160,44 @@ GuiDlgedit::GuiDlgedit () menuitem =gtk_image_menu_item_new_from_stock ("gtk-new", accel_group); gtk_container_add (GTK_CONTAINER (submenu), menuitem); gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (1)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_file_new_activate), (gpointer) this); + g_signal_connect (G_OBJECT (menuitem), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (menuitem), "leave-notify-event", G_CALLBACK (on_clear_help), message); + g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (on_file_new_activate), (gpointer) this); gtk_widget_show (menuitem); // Open menuitem = gtk_image_menu_item_new_from_stock ("gtk-open", accel_group); gtk_container_add (GTK_CONTAINER (submenu), menuitem); gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (2)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_file_load_activate), (gpointer) this); + g_signal_connect (G_OBJECT (menuitem), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (menuitem), "leave-notify-event", G_CALLBACK (on_clear_help), message); + g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (on_file_load_activate), (gpointer) this); gtk_widget_show (menuitem); // Open Previous > menuitem = gtk_menu_item_new_with_label ("Open Previous"); gtk_container_add (GTK_CONTAINER (submenu), menuitem); gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (2)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); + g_signal_connect (G_OBJECT (menuitem), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (menuitem), "leave-notify-event", G_CALLBACK (on_clear_help), message); menuItem[OPEN_RECENT] = menuitem; // Save menuitem = gtk_image_menu_item_new_from_stock ("gtk-save", accel_group); gtk_container_add (GTK_CONTAINER (submenu), menuitem); gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (3)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_file_save_activate), (gpointer) this); + g_signal_connect (G_OBJECT (menuitem), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (menuitem), "leave-notify-event", G_CALLBACK (on_clear_help), message); + g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (on_file_save_activate), (gpointer) this); menuItem[SAVE] = menuitem; // Save As menuitem = gtk_image_menu_item_new_from_stock ("gtk-save-as", accel_group); gtk_container_add (GTK_CONTAINER (submenu), menuitem); gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (4)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_file_save_as_activate), (gpointer) this); + g_signal_connect (G_OBJECT (menuitem), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (menuitem), "leave-notify-event", G_CALLBACK (on_clear_help), message); + g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (on_file_save_as_activate), (gpointer) this); menuItem[SAVE_AS] = menuitem; // Seperator @@ -205,32 +209,34 @@ GuiDlgedit::GuiDlgedit () menuitem = gtk_image_menu_item_new_from_stock ("gtk-revert-to-saved", accel_group); gtk_container_add (GTK_CONTAINER (submenu), menuitem); gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (7)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_file_revert_activate), (gpointer) NULL); + g_signal_connect (G_OBJECT (menuitem), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (menuitem), "leave-notify-event", G_CALLBACK (on_clear_help), message); + g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (on_file_revert_activate), (gpointer) NULL); menuItem[REVERT] = menuitem; // Close menuitem = gtk_image_menu_item_new_from_stock ("gtk-close", accel_group); gtk_container_add (GTK_CONTAINER (submenu), menuitem); gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (5)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_file_close_activate), (gpointer) NULL); + g_signal_connect (G_OBJECT (menuitem), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (menuitem), "leave-notify-event", G_CALLBACK (on_clear_help), message); + g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (on_file_close_activate), (gpointer) NULL); menuItem[CLOSE] = menuitem; // Seperator +#ifndef MAC_INTEGRATION menuitem = gtk_menu_item_new (); - gtk_menu_append (GTK_MENU (submenu), menuitem); + gtk_menu_shell_append (GTK_MENU_SHELL (submenu), menuitem); gtk_widget_set_sensitive (menuitem, FALSE); +#endif // Quit - menuitem = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group); - gtk_menu_append (GTK_MENU (submenu), menuitem); - gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (6)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_widget_destroy), (gpointer) NULL); + GtkWidget *quit_item = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group); + gtk_menu_append (GTK_MENU (submenu), quit_item); + gtk_object_set_data (GTK_OBJECT (quit_item), "help-id", GINT_TO_POINTER (6)); + g_signal_connect (G_OBJECT (quit_item), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (quit_item), "leave-notify-event", G_CALLBACK (on_clear_help), message); + g_signal_connect (G_OBJECT (quit_item), "activate", G_CALLBACK (on_widget_destroy), (gpointer) NULL); // Attach File Menu menuitem = gtk_menu_item_new_with_mnemonic ("_File"); @@ -246,9 +252,9 @@ GuiDlgedit::GuiDlgedit () gtk_container_add (GTK_CONTAINER (submenu), menuitem); gtk_widget_add_accelerator (menuitem, "activate", accel_group, GDK_t, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (10)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_dialogue_player_activate), (gpointer) NULL); + g_signal_connect (G_OBJECT (menuitem), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (menuitem), "leave-notify-event", G_CALLBACK (on_clear_help), message); + g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (on_dialogue_player_activate), (gpointer) NULL); menuItem[SETTINGS] = menuitem; // Custom Functions @@ -257,9 +263,9 @@ GuiDlgedit::GuiDlgedit () gtk_container_add (GTK_CONTAINER (submenu), menuitem); gtk_widget_add_accelerator (menuitem, "activate", accel_group, GDK_p, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (11)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_dialogue_functions_activate), (gpointer) this); + g_signal_connect (G_OBJECT (menuitem), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (menuitem), "leave-notify-event", G_CALLBACK (on_clear_help), message); + g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (on_dialogue_functions_activate), (gpointer) this); menuItem[FUNCTIONS] = menuitem; // Seperator @@ -273,9 +279,9 @@ GuiDlgedit::GuiDlgedit () gtk_container_add (GTK_CONTAINER (submenu), menuitem); gtk_widget_add_accelerator (menuitem, "activate", accel_group, GDK_c, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (12)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_dialogue_compile_activate), (gpointer) NULL); + g_signal_connect (G_OBJECT (menuitem), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (menuitem), "leave-notify-event", G_CALLBACK (on_clear_help), message); + g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (on_dialogue_compile_activate), (gpointer) NULL); menuItem[COMPILE] = menuitem; // Preview i18n @@ -284,9 +290,9 @@ GuiDlgedit::GuiDlgedit () gtk_container_add (GTK_CONTAINER (submenu), menuitem); gtk_widget_add_accelerator (menuitem, "activate", accel_group, GDK_v, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (13)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_dialogue_preview_activate), (gpointer) this); + g_signal_connect (G_OBJECT (menuitem), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (menuitem), "leave-notify-event", G_CALLBACK (on_clear_help), message); + g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (on_dialogue_preview_activate), (gpointer) this); gtk_widget_show (menuitem); menuItem[PREVIEW] = menuitem; #endif @@ -297,9 +303,9 @@ GuiDlgedit::GuiDlgedit () gtk_container_add (GTK_CONTAINER (submenu), menuitem); gtk_widget_add_accelerator (menuitem, "activate", accel_group, GDK_e, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (14)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_dialogue_run_activate), (gpointer) NULL); + g_signal_connect (G_OBJECT (menuitem), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (menuitem), "leave-notify-event", G_CALLBACK (on_clear_help), message); + g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (on_dialogue_run_activate), (gpointer) NULL); gtk_widget_show (menuitem); menuItem[RUN] = menuitem; @@ -319,6 +325,19 @@ GuiDlgedit::GuiDlgedit () gtk_widget_show_all (menu); +#ifdef MAC_INTEGRATION + // Mac OSX-Style menu + gtk_widget_hide (menu); + + mainMenu = menu; + + ige_mac_menu_set_menu_bar (GTK_MENU_SHELL (menu)); + ige_mac_menu_set_quit_menu_item (GTK_MENU_ITEM (quit_item)); + + // IgeMacMenuGroup *group = ige_mac_menu_add_app_menu_group (); + // ige_mac_menu_add_app_menu_item (group, GTK_MENU_ITEM (quit_item), NULL); +#endif + vpaned = gtk_vpaned_new (); gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 2); gtk_widget_show (vpaned); @@ -903,10 +922,10 @@ void GuiDlgedit::initMenu () { menuitem = gtk_menu_item_new_with_label ((*i)->shortName ().c_str ()); gtk_container_add (GTK_CONTAINER (windowMenu), menuitem); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_window_activate), (gpointer) *i); + g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (on_window_activate), (gpointer) *i); gtk_object_set_data (GTK_OBJECT (menuitem), "help-id", GINT_TO_POINTER (20)); - gtk_signal_connect (GTK_OBJECT (menuitem), "enter-notify-event", GTK_SIGNAL_FUNC (on_display_help), message); - gtk_signal_connect (GTK_OBJECT (menuitem), "leave-notify-event", GTK_SIGNAL_FUNC (on_clear_help), message); + g_signal_connect (G_OBJECT (menuitem), "enter-notify-event", G_CALLBACK (on_display_help), message); + g_signal_connect (G_OBJECT (menuitem), "leave-notify-event", G_CALLBACK (on_clear_help), message); gtk_widget_show (menuitem); // Menu Accelerators @@ -914,6 +933,10 @@ void GuiDlgedit::initMenu () // gtk_widget_add_accelerator (menuitem, "activate", accel_group, // GDK_1 + position, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); } + +#ifdef MAC_INTEGRATION + ige_mac_menu_sync(GTK_MENU_SHELL(mainMenu)); +#endif } // initialize the list of recently opened files @@ -924,10 +947,16 @@ void GuiDlgedit::initRecentFiles () // first, remove everything from the submenu if (submenu != NULL) + { gtk_container_foreach (GTK_CONTAINER (submenu), (GtkCallback) gtk_widget_destroy, NULL); + } else + { + // append submenu submenu = gtk_menu_new (); - + gtk_menu_item_set_submenu (GTK_MENU_ITEM(menuItem[OPEN_RECENT]), submenu); + } + // get list of files std::list files = CfgData::data->getFiles (); @@ -937,12 +966,13 @@ void GuiDlgedit::initRecentFiles () menuitem = gtk_menu_item_new_with_label ((*i).c_str ()); gtk_container_add (GTK_CONTAINER (submenu), menuitem); gtk_object_set_user_data (GTK_OBJECT (menuitem), (void *) (*i).c_str ()); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (on_file_load_recent_activate), (gpointer) this); + g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (on_file_load_recent_activate), (gpointer) this); gtk_widget_show (menuitem); } - // append submenu - gtk_menu_item_set_submenu (GTK_MENU_ITEM(menuItem[OPEN_RECENT]), submenu); +#ifdef MAC_INTEGRATION + ige_mac_menu_sync(GTK_MENU_SHELL(mainMenu)); +#endif } void GuiDlgedit::clear () diff --git a/src/dlgedit/gui_dlgedit.h b/src/dlgedit/gui_dlgedit.h index 0129639..a22bd67 100644 --- a/src/dlgedit/gui_dlgedit.h +++ b/src/dlgedit/gui_dlgedit.h @@ -214,6 +214,7 @@ class GuiDlgedit GtkWidget *wnd; // actual main window GtkWidget *menuItem[MAX_ITEM]; // pointers to a few menu-items GtkWidget *windowMenu; // the 'Windows' dropdown menu + GtkWidget *mainMenu; // the menu bar GtkWidget *status_mode; // statusbar displaying the program state std::vector dialogues_;// dialogues currently loaded std::string directory_; // directory used in last file-selection diff --git a/src/dlgedit/gui_resources.cc b/src/dlgedit/gui_resources.cc index a775a03..af58c1d 100644 --- a/src/dlgedit/gui_resources.cc +++ b/src/dlgedit/gui_resources.cc @@ -32,7 +32,7 @@ /** * The font for text output. */ -GdkFont *GuiResources::Font; +PangoLayout *GuiResources::Font; /** * Some pens for line drawing. @@ -43,8 +43,8 @@ GdkGC *GuiResources::Color[MAX_GC]; void GuiResources::init (GtkWidget *widget) { // font to use on the drawing area - Font = gdk_font_load ("-*-*-medium-r-normal-sans-12-*-*-*-*-*-iso8859-1"); - + Font = gtk_widget_create_pango_layout (widget, NULL); + GdkColor c; GdkWindow *window = gtk_widget_get_parent_window (widget); diff --git a/src/dlgedit/gui_resources.h b/src/dlgedit/gui_resources.h index 8a24dfd..5b2eae0 100644 --- a/src/dlgedit/gui_resources.h +++ b/src/dlgedit/gui_resources.h @@ -29,6 +29,7 @@ #ifndef GUI_RESOURCES_H #define GUI_RESOURCES_H +#include #include #include "dlg_types.h" @@ -70,12 +71,12 @@ class GuiResources static GdkGC *getFill (mode_type mode, node_type type); /** * Retrieve the font used to draw text onto a drawing area. - * @return a GdkFont. + * @return a PangoLayout. */ - static GdkFont *font () { return Font; } + static PangoLayout *font () { return Font; } private: - static GdkFont *Font; // font for text-output + static PangoLayout *Font; // font for text-output static GdkGC *Color[MAX_GC]; // custom Pens };