diff --git a/pw3270.komodoproject b/pw3270.komodoproject
index 7c3ba41..f335803 100644
--- a/pw3270.komodoproject
+++ b/pw3270.komodoproject
@@ -1,4 +1,254 @@
+
+ 1
+ 1
+ 1
+ 1
+ 250
+ 0
+ 1
+ 0
+ 2
+ 1
+ 0
+ %25a %25b %25d %25H:%25M:%25S %25Y
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ smart
+ 80
+ 1
+ 1
+ 1
+ squaretree
+ 0
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ mac-roman
+ 1
+ 0
+ 1
+ 1
+ 0
+ 1
+ 1
+
+ *.*~;*.bak;*.tmp;CVS;.#*;*.pyo;*.pyc;.svn;.git;.hg;.bzr;*%25*;tmp*.html;.DS_Store;*.swp;*.kpf;*.komodoproject;.komodotools;__pycache__
+
+ 0
+ 4
+
+ default
+
+
+ default
+
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ utf-8
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+ 1
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ ascii
+
+
+ 0
+ ascii
+
+
+ 0
+ Default Encoding
+ 2
+
+
+ 0
+ Default Encoding
+ 2
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ utf-8
+
+
+ 0
+ utf-8
+
+
+ 0
+ utf-8
+
+
+ 0
+ Default Encoding
+
+
+ 0
+ 1000
+ 1
+ 0
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ cw
+ 1
+ 1
+ off
+
+
+
+ cwT
+ 0
+ 2000
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+ 8
+ 0
+
+ errors
+ 1
+ 1
+
+ 5
+
diff --git a/src/pw3270/uiparser/action.c b/src/pw3270/uiparser/action.c
index 6324b65..e7b5d6d 100644
--- a/src/pw3270/uiparser/action.c
+++ b/src/pw3270/uiparser/action.c
@@ -120,4 +120,3 @@
}
}
}
-
diff --git a/src/pw3270/uiparser/menu.c b/src/pw3270/uiparser/menu.c
index 73b9e93..72cde38 100644
--- a/src/pw3270/uiparser/menu.c
+++ b/src/pw3270/uiparser/menu.c
@@ -72,7 +72,9 @@
gtk_menu_shell_append((GtkMenuShell *) menu, widget);
-// trace("%s: %s=%p",__FUNCTION__,gtk_widget_get_name(widget),widget);
+#ifdef HAVE_GTKMAC
+ ui_check_for_sysmenu(widget,info,ui_get_attribute("sysmenu",names,values));
+#endif // HAVE_GTKMAC
return ui_insert_element(info, action, UI_ELEMENT_MENU, names, values, G_OBJECT(widget), error);
}
diff --git a/src/pw3270/uiparser/menuitem.c b/src/pw3270/uiparser/menuitem.c
index 0b62675..69d4e4f 100644
--- a/src/pw3270/uiparser/menuitem.c
+++ b/src/pw3270/uiparser/menuitem.c
@@ -32,12 +32,34 @@
#include "private.h"
#ifdef HAVE_GTKMAC
- #include
+ #include
#endif // HAVE_GTKMAC
/*--[ Implement ]------------------------------------------------------------------------------------*/
+#ifdef HAVE_GTKMAC
+ void ui_check_for_sysmenu(GtkWidget *widget, struct parser *info, const gchar *name)
+ {
+ static const gchar *sysmenu[SYSMENU_ITEM_COUNT] = { "about", "preferences", "quit" };
+ int f;
+
+ if(!name)
+ return;
+
+ for(f=0;fsysmenu[f] = widget;
+ return;
+ }
+ }
+
+ }
+#endif // HAVE_GTKMAC
+
+
GObject * ui_create_menuitem(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
{
GtkWidget * widget = NULL;
@@ -113,10 +135,13 @@
}
}
+#ifdef HAVE_GTKMAC
+ ui_check_for_sysmenu(widget,info,ui_get_attribute("sysmenu",names,values));
+#endif // HAVE_GTKMAC
+
return G_OBJECT(widget);
}
void ui_end_menuitem(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error)
{
}
-
diff --git a/src/pw3270/uiparser/parser.c b/src/pw3270/uiparser/parser.c
index 61f99e4..6e5b5a4 100644
--- a/src/pw3270/uiparser/parser.c
+++ b/src/pw3270/uiparser/parser.c
@@ -232,10 +232,30 @@ void parser_build(struct parser *p, GtkWidget *widget)
gtk_window_set_default(GTK_WINDOW(p->toplevel),widget);
#ifdef HAVE_GTKMAC
- if(p->topmenu)
{
- gtk_widget_set_visible(p->topmenu,FALSE);
- gtk_mac_menu_set_menu_bar(GTK_MENU_SHELL(p->topmenu));
+ if(p->topmenu)
+ {
+ gtk_widget_set_visible(p->topmenu,FALSE);
+ gtk_mac_menu_set_menu_bar(GTK_MENU_SHELL(p->topmenu));
+ }
+
+ if(p->sysmenu[SYSMENU_ITEM_QUIT])
+ {
+ gtk_mac_menu_set_quit_menu_item (GTK_MENU_ITEM(p->sysmenu[SYSMENU_ITEM_QUIT]));
+ }
+
+ if(p->sysmenu[SYSMENU_ITEM_ABOUT])
+ {
+ GtkMacMenuGroup *group = gtk_mac_menu_add_app_menu_group();
+ gtk_mac_menu_add_app_menu_item(group,GTK_MENU_ITEM(p->sysmenu[SYSMENU_ITEM_ABOUT]),NULL);
+ }
+
+ if(p->sysmenu[SYSMENU_ITEM_PREFERENCES])
+ {
+ GtkMacMenuGroup *group = gtk_mac_menu_add_app_menu_group();
+ gtk_mac_menu_add_app_menu_item(group,GTK_MENU_ITEM(p->sysmenu[SYSMENU_ITEM_PREFERENCES]),NULL);
+ }
+
}
#endif // HAVE_GTKMAC
@@ -364,4 +384,3 @@ const gchar * ui_get_dir_name(UI_ATTR_DIRECTION dir)
return "";
return dirname[dir];
}
-
diff --git a/src/pw3270/uiparser/private.h b/src/pw3270/uiparser/private.h
index 8034861..fc15b37 100644
--- a/src/pw3270/uiparser/private.h
+++ b/src/pw3270/uiparser/private.h
@@ -53,6 +53,18 @@
#define UI_ELEMENT_MENUITEM UI_ELEMENT_COUNT+4
#define UI_ELEMENT_SCROLL UI_ELEMENT_COUNT+5
+#ifdef HAVE_GTKMAC
+ enum SYSMENU_ITEM
+ {
+ SYSMENU_ITEM_ABOUT,
+ SYSMENU_ITEM_PREFERENCES,
+ SYSMENU_ITEM_QUIT,
+
+ SYSMENU_ITEM_COUNT
+
+ };
+#endif // HAVE_GTKMAC
+
struct parser
{
GtkWidget * toplevel;
@@ -69,6 +81,9 @@
GHashTable * actions; /**< List of actions */
GHashTable * element_list[UI_ELEMENT_COUNT];
const UI_WIDGET_SETUP * setup;
+#ifdef HAVE_GTKMAC
+ GtkWidget * sysmenu[SYSMENU_ITEM_COUNT];
+#endif // HAVE_GTKMAC
};
int ui_parse_file(struct parser *info, const gchar *filename);
@@ -77,6 +92,10 @@
GObject * ui_get_element(struct parser *info, GtkAction *action, enum ui_element id, const gchar **names, const gchar **values, GError **error);
GObject * ui_insert_element(struct parser *info, GtkAction *action, enum ui_element id, const gchar **names, const gchar **values, GObject *widget, GError **error);
+#ifdef HAVE_GTKMAC
+ void ui_check_for_sysmenu(GtkWidget *widget, struct parser *info, const gchar *name);
+#endif // HAVE_GTKMAC
+
GObject * ui_create_menubar(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
GObject * ui_create_menu(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
GObject * ui_create_menuitem(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
diff --git a/ui/00default.xml b/ui/00default.xml
index 66023fb..acb41ca 100644
--- a/ui/00default.xml
+++ b/ui/00default.xml
@@ -54,7 +54,7 @@
-
+
-