Rewrote MooUIXML; works more or less

master
Yevgen Muntyan 2005-09-15 16:37:30 +00:00
parent 89598f1929
commit c2e08e6ece
18 changed files with 1735 additions and 969 deletions

View File

@ -24,7 +24,7 @@
</ignoreparts>
<projectdirectory>.</projectdirectory>
<absoluteprojectpath>false</absoluteprojectpath>
<description></description>
<description/>
<secondaryLanguages>
<language>C</language>
</secondaryLanguages>
@ -33,20 +33,20 @@
<kdevautoproject>
<general>
<activetarget>moo/libmoo.la</activetarget>
<useconfiguration>debug</useconfiguration>
<useconfiguration>gtk-cvs</useconfiguration>
</general>
<run>
<mainprogram>tests/editor</mainprogram>
<mainprogram>tests/medit</mainprogram>
<directoryradio>executable</directoryradio>
<customdirectory>/</customdirectory>
<programargs></programargs>
<programargs/>
<terminal>false</terminal>
<autocompile>false</autocompile>
<envvars/>
</run>
<configurations>
<debug>
<configargs>--enable-debug=full --enable-all-gcc-warnings=fatal --enable-developer-mode --disable-moo-module --without-python --without-mooterm --without-mooui</configargs>
<configargs>--enable-debug=full --enable-all-gcc-warnings=fatal --enable-developer-mode --disable-moo-module --without-python --without-mooterm --without-mooapp</configargs>
<builddir>build/debug</builddir>
<ccompiler>kdevgccoptions</ccompiler>
<cxxcompiler>kdevgppoptions</cxxcompiler>
@ -54,14 +54,31 @@
<cflags>-O0 -g3 -pg</cflags>
<cxxflags>-O0 -g3 -pg</cxxflags>
<envvars/>
<topsourcedir></topsourcedir>
<cppflags></cppflags>
<ldflags></ldflags>
<ccompilerbinary></ccompilerbinary>
<cxxcompilerbinary></cxxcompilerbinary>
<f77compilerbinary></f77compilerbinary>
<f77flags></f77flags>
<topsourcedir/>
<cppflags/>
<ldflags/>
<ccompilerbinary/>
<cxxcompilerbinary/>
<f77compilerbinary/>
<f77flags/>
</debug>
<gtk-cvs>
<configargs>--enable-debug=full --enable-all-gcc-warnings=fatal --enable-developer-mode --disable-moo-module --without-python --without-mooterm --without-mooapp</configargs>
<builddir>build/gtk-cvs</builddir>
<ccompiler>kdevgccoptions</ccompiler>
<cxxcompiler>kdevgppoptions</cxxcompiler>
<f77compiler>kdevg77options</f77compiler>
<cflags>-O0 -g3 -pg</cflags>
<cxxflags>-O0 -g3 -pg</cxxflags>
<envvars/>
<topsourcedir/>
<cppflags/>
<ldflags/>
<ccompilerbinary/>
<cxxcompilerbinary/>
<f77compilerbinary/>
<f77flags/>
</gtk-cvs>
<optimized>
<configargs>--enable-all-gcc-warnings=fatal --enable-developer-mode --without-mooapp --without-mooterm --without-python</configargs>
<builddir>build/optimized</builddir>
@ -175,7 +192,7 @@
<abortonerror>true</abortonerror>
<numberofjobs>1</numberofjobs>
<dontact>false</dontact>
<makebin></makebin>
<makebin/>
<prio>0</prio>
</make>
</kdevautoproject>
@ -183,10 +200,10 @@
<general>
<dbgshell>libtool</dbgshell>
<programargs>--g-fatal-warnings</programargs>
<gdbpath></gdbpath>
<configGdbScript></configGdbScript>
<runShellScript></runShellScript>
<runGdbScript></runGdbScript>
<gdbpath/>
<configGdbScript/>
<runShellScript/>
<runGdbScript/>
<breakonloadinglibs>true</breakonloadinglibs>
<separatetty>false</separatetty>
<floatingtoolbar>true</floatingtoolbar>
@ -251,16 +268,16 @@
</kdevdoctreeview>
<kdevfilecreate>
<filetypes>
<type icon="source" ext="g" create="template" name="GAP source" >
<type icon="source" ext="g" name="GAP source" create="template" >
<descr>A new empty GAP source file</descr>
</type>
<type icon="source_cpp" ext="cpp" create="template" name="C++ Source" >
<type icon="source_cpp" ext="cpp" name="C++ Source" create="template" >
<descr>A new empty C++ file.</descr>
</type>
<type icon="source_h" ext="h" create="template" name="C/C++ Header" >
<type icon="source_h" ext="h" name="C/C++ Header" create="template" >
<descr>A new empty header file for C/C++.</descr>
</type>
<type icon="source_c" ext="c" create="template" name="C Source" >
<type icon="source_c" ext="c" name="C Source" create="template" >
<descr>A new empty C file.</descr>
</type>
</filetypes>
@ -287,7 +304,7 @@
</codecompletion>
<references/>
<creategettersetter>
<prefixGet></prefixGet>
<prefixGet/>
<prefixSet>set</prefixSet>
<prefixVariable>m_,_</prefixVariable>
<parameterName>theValue</parameterName>

View File

@ -604,7 +604,10 @@ static void open_recent (MooEditor *editor,
static MooEditWindow *create_window (MooEditor *editor)
{
MooEditWindow *window = g_object_new (MOO_TYPE_EDIT_WINDOW,
"editor", editor, NULL);
"editor", editor,
"ui-object-xml",
moo_editor_get_ui_xml (editor),
NULL);
window_list_add (editor, window);
_moo_window_attach_plugins (window);
gtk_widget_show (GTK_WIDGET (window));

View File

@ -531,7 +531,6 @@ GObject *moo_edit_window_constructor (GType type,
{
GtkWidget *notebook, *paned;
MooEditWindow *window;
MooUIXML *xml;
GObject *object =
G_OBJECT_CLASS(moo_edit_window_parent_class)->constructor (type, n_props, props);
@ -539,9 +538,6 @@ GObject *moo_edit_window_constructor (GType type,
window = MOO_EDIT_WINDOW (object);
g_return_val_if_fail (window->priv->editor != NULL, object);
xml = moo_editor_get_ui_xml (window->priv->editor);
moo_ui_object_set_ui_xml (MOO_UI_OBJECT (window), xml);
window->priv->statusbar = GTK_STATUSBAR (MOO_WINDOW(window)->statusbar);
gtk_widget_show (MOO_WINDOW(window)->statusbar);
window->priv->statusbar_context_id =

View File

@ -57,10 +57,8 @@ static void moo_action_set_sensitive_real (MooAction *action,
static void moo_action_set_visible_real (MooAction *action,
gboolean visible);
static GtkWidget *moo_action_create_menu_item_real (MooAction *action,
GtkMenuShell *menushell,
int position);
static gboolean moo_action_create_tool_item_real (MooAction *action,
static GtkWidget *moo_action_create_menu_item_real (MooAction *action);
static GtkWidget *moo_action_create_tool_item_real (MooAction *action,
GtkToolbar *toolbar,
int position);
@ -687,9 +685,7 @@ gboolean moo_action_get_no_accel (MooAction *action)
}
GtkWidget *moo_action_create_menu_item (MooAction *action,
GtkMenuShell *menushell,
int position)
GtkWidget *moo_action_create_menu_item (MooAction *action)
{
MooActionClass *klass;
@ -698,11 +694,11 @@ GtkWidget *moo_action_create_menu_item (MooAction *action,
klass = MOO_ACTION_GET_CLASS (action);
g_return_val_if_fail (klass != NULL && klass->create_menu_item != NULL, NULL);
return klass->create_menu_item (action, menushell, position);
return klass->create_menu_item (action);
}
gboolean moo_action_create_tool_item (MooAction *action,
GtkWidget *moo_action_create_tool_item (MooAction *action,
GtkToolbar *toolbar,
int position)
{
@ -762,9 +758,7 @@ const char *moo_action_make_accel_path (const char *group_id,
}
static GtkWidget *moo_action_create_menu_item_real (MooAction *action,
GtkMenuShell *menu_shell,
int position)
static GtkWidget *moo_action_create_menu_item_real (MooAction *action)
{
GtkWidget *item = NULL;
@ -796,22 +790,17 @@ static GtkWidget *moo_action_create_menu_item_real (MooAction *action,
moo_action_add_proxy (action, item);
if (position >= 0)
gtk_menu_shell_insert (menu_shell, item, position);
else
gtk_menu_shell_append (menu_shell, item);
return item;
}
static gboolean moo_action_create_tool_item_real (MooAction *action,
GtkToolbar *toolbar,
int position)
static GtkWidget*
moo_action_create_tool_item_real (MooAction *action,
GtkToolbar *toolbar,
int position)
{
#if GTK_MINOR_VERSION >= 4
GtkToolItem *item = NULL;
GtkTooltips *tooltips = NULL;
if (action->stock_id)
{
@ -832,13 +821,17 @@ static gboolean moo_action_create_tool_item_real (MooAction *action,
gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (item), TRUE);
}
if (action->group)
tooltips = moo_action_group_get_tooltips (MOO_ACTION_GROUP (action->group));
if (tooltips && action->tooltip)
if (action->tooltip)
{
GtkTooltips *tooltips = gtk_tooltips_new ();
gtk_object_sink (g_object_ref (tooltips));
gtk_tool_item_set_tooltip (item,
tooltips,
action->tooltip,
action->tooltip);
g_object_set_data_full (G_OBJECT (item), "moo-tooltips",
tooltips, g_object_unref);
}
gtk_toolbar_insert (toolbar, item, position);
gtk_container_child_set (GTK_CONTAINER (toolbar), GTK_WIDGET (item),
@ -883,7 +876,7 @@ static gboolean moo_action_create_tool_item_real (MooAction *action,
moo_action_add_proxy (action, GTK_WIDGET (item));
return TRUE;
return GTK_WIDGET (item);
}

View File

@ -68,10 +68,8 @@ struct _MooActionClass
GObjectClass parent_class;
/* methods */
GtkWidget *(*create_menu_item) (MooAction *action,
GtkMenuShell *menushell,
int position);
gboolean (*create_tool_item) (MooAction *action,
GtkWidget *(*create_menu_item) (MooAction *action);
GtkWidget *(*create_tool_item) (MooAction *action,
GtkToolbar *toolbar,
int position);
@ -121,10 +119,8 @@ const char *moo_action_get_default_accel (MooAction *action);
char *moo_action_get_accel_label (MooAction *action);
char *moo_action_get_default_accel_label (MooAction *action);
GtkWidget *moo_action_create_menu_item (MooAction *action,
GtkMenuShell *menushell,
int position);
gboolean moo_action_create_tool_item (MooAction *action,
GtkWidget *moo_action_create_menu_item (MooAction *action);
GtkWidget *moo_action_create_tool_item (MooAction *action,
GtkToolbar *toolbar,
int position);

View File

@ -18,7 +18,6 @@
struct _MooActionGroupPrivate {
GHashTable *actions; /* char* -> MooAction* */
GtkAccelGroup *accel_group;
GtkTooltips *tooltips;
char *name;
};
@ -60,7 +59,6 @@ static void moo_action_group_init (MooActionGroup *group)
(GDestroyNotify) g_free,
(GDestroyNotify) g_object_unref);
group->priv->accel_group = NULL;
group->priv->tooltips = NULL;
group->priv->name = NULL;
}
@ -176,31 +174,6 @@ void moo_action_group_set_accel_group (MooActionGroup *group,
}
void moo_action_group_set_tooltips (MooActionGroup *group,
GtkTooltips *tips)
{
g_return_if_fail (MOO_IS_ACTION_GROUP (group) && group->priv != NULL);
g_return_if_fail (GTK_IS_TOOLTIPS (tips));
if (group->priv->tooltips == tips)
return;
if (group->priv->tooltips)
g_object_unref (G_OBJECT (group->priv->tooltips));
group->priv->tooltips = tips;
if (group->priv->tooltips)
g_object_ref (G_OBJECT (group->priv->tooltips));
}
GtkTooltips *moo_action_group_get_tooltips (MooActionGroup *group)
{
g_return_val_if_fail (MOO_IS_ACTION_GROUP (group) && group->priv != NULL, NULL);
if (!group->priv->tooltips)
group->priv->tooltips = gtk_tooltips_new ();
return group->priv->tooltips;
}
typedef struct {
MooActionGroupForeachFunc func;
gpointer data;

View File

@ -59,11 +59,6 @@ void moo_action_group_set_name (MooActionGroup *group,
void moo_action_group_set_accel_group (MooActionGroup *group,
GtkAccelGroup *accel_group);
void moo_action_group_set_tooltips (MooActionGroup *group,
GtkTooltips *tips);
GtkTooltips *moo_action_group_get_tooltips (MooActionGroup *group);
typedef gboolean (*MooActionGroupForeachFunc) (MooActionGroup *group,
MooAction *action,
gpointer data);

View File

@ -35,10 +35,8 @@ static void moo_menu_action_get_property (GObject *object,
static void moo_menu_action_add_proxy (MooAction *action,
GtkWidget *proxy);
static GtkWidget *moo_menu_action_create_menu_item (MooAction *action,
GtkMenuShell *menushell,
int position);
static gboolean moo_menu_action_create_tool_item (MooAction *action,
static GtkWidget *moo_menu_action_create_menu_item (MooAction *action);
static GtkWidget *moo_menu_action_create_tool_item (MooAction *action,
GtkToolbar *toolbar,
int position);
@ -145,9 +143,7 @@ static void moo_menu_action_add_proxy (MooAction *action,
}
static GtkWidget *moo_menu_action_create_menu_item (MooAction *action,
GtkMenuShell *menushell,
int position)
static GtkWidget *moo_menu_action_create_menu_item (MooAction *action)
{
MooMenuAction *menu_action;
GtkMenuItem *item;
@ -159,18 +155,17 @@ static GtkWidget *moo_menu_action_create_menu_item (MooAction *action,
action);
g_return_val_if_fail (item != NULL, NULL);
gtk_menu_shell_insert (menushell, GTK_WIDGET (item), position);
moo_menu_action_add_proxy (action, GTK_WIDGET (item));
return GTK_WIDGET (item);
}
static gboolean moo_menu_action_create_tool_item (G_GNUC_UNUSED MooAction *action,
static GtkWidget *moo_menu_action_create_tool_item (G_GNUC_UNUSED MooAction *action,
G_GNUC_UNUSED GtkToolbar *toolbar,
G_GNUC_UNUSED int position)
{
g_warning ("%s: should not be called", G_STRLOC);
return FALSE;
return NULL;
}

View File

@ -32,10 +32,8 @@ static void moo_toggle_action_get_property (GObject *object,
GValue *value,
GParamSpec *pspec);
static GtkWidget *moo_toggle_action_create_menu_item (MooAction *action,
GtkMenuShell *menushell,
int position);
static gboolean moo_toggle_action_create_tool_item (MooAction *action,
static GtkWidget *moo_toggle_action_create_menu_item (MooAction *action);
static GtkWidget *moo_toggle_action_create_tool_item (MooAction *action,
GtkToolbar *toolbar,
int position);
@ -186,9 +184,8 @@ void moo_toggle_action_set_active (MooToggleAction *action,
}
static GtkWidget *moo_toggle_action_create_menu_item (MooAction *action,
GtkMenuShell *menu_shell,
int position)
static GtkWidget*
moo_toggle_action_create_menu_item (MooAction *action)
{
GtkWidget *item = NULL;
@ -209,22 +206,17 @@ static GtkWidget *moo_toggle_action_create_menu_item (MooAction *action,
moo_toggle_action_add_proxy (action, item);
if (position >= 0)
gtk_menu_shell_insert (menu_shell, item, position);
else
gtk_menu_shell_append (menu_shell, item);
return item;
}
static gboolean moo_toggle_action_create_tool_item (MooAction *action,
GtkToolbar *toolbar,
int position)
static GtkWidget*
moo_toggle_action_create_tool_item (MooAction *action,
GtkToolbar *toolbar,
int position)
{
#if GTK_CHECK_VERSION(2,4,0)
GtkToolItem *item = NULL;
GtkTooltips *tooltips = NULL;
if (action->stock_id)
{
@ -246,13 +238,16 @@ static gboolean moo_toggle_action_create_tool_item (MooAction *action,
gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (item), TRUE);
}
if (action->group)
tooltips = moo_action_group_get_tooltips (MOO_ACTION_GROUP (action->group));
if (tooltips && action->tooltip)
if (action->tooltip)
{
GtkTooltips *tooltips = gtk_tooltips_new ();
gtk_tool_item_set_tooltip (item,
tooltips,
action->tooltip,
action->tooltip);
g_object_set_data_full (G_OBJECT (item), "moo-tooltips",
tooltips, g_object_unref);
}
gtk_toolbar_insert (toolbar, item, position);
gtk_container_child_set (GTK_CONTAINER (toolbar), GTK_WIDGET (item),
@ -287,7 +282,7 @@ static gboolean moo_toggle_action_create_tool_item (MooAction *action,
moo_toggle_action_add_proxy (action, GTK_WIDGET (item));
return TRUE;
return GTK_WIDGET (item);
}

View File

@ -32,10 +32,6 @@ static void moo_ui_object_set_id (MooUIObject *object,
const char *id);
static void moo_ui_object_add_class_actions (MooUIObject *object);
static void xml_changed (MooUIObject *object);
static void disconnect_xml_changed (MooUIXML *xml,
gpointer object);
GType moo_ui_object_get_type (void)
{
@ -170,13 +166,9 @@ MooUIXML *_moo_ui_object_get_ui_xml_impl (MooUIObject *object)
if (!xml)
{
xml = moo_ui_xml_new ();
g_signal_connect_swapped (xml, "changed",
G_CALLBACK (xml_changed), object);
g_object_weak_ref (G_OBJECT (object),
(GWeakNotify) disconnect_xml_changed, xml);
g_object_set_qdata (G_OBJECT (object),
MOO_UI_OBJECT_UI_XML_QUARK,
xml);
g_object_set_qdata_full (G_OBJECT (object),
MOO_UI_OBJECT_UI_XML_QUARK,
xml, g_object_unref);
g_object_notify (G_OBJECT (object), "ui-object-xml");
}
@ -193,53 +185,24 @@ void _moo_ui_object_set_ui_xml_impl (MooUIObject *object,
g_return_if_fail (!xml || MOO_IS_UI_XML (xml));
old = g_object_get_qdata (G_OBJECT (object), MOO_UI_OBJECT_UI_XML_QUARK);
if (old == xml) return;
if (old)
{
g_object_weak_unref (G_OBJECT (object),
(GWeakNotify) disconnect_xml_changed, old);
disconnect_xml_changed (old, object);
}
if (old == xml)
return;
if (xml)
{
g_signal_connect_swapped (xml, "changed",
G_CALLBACK (xml_changed), object);
g_object_weak_ref (G_OBJECT (object),
(GWeakNotify) disconnect_xml_changed, xml);
g_object_set_qdata (G_OBJECT (object),
MOO_UI_OBJECT_UI_XML_QUARK,
g_object_ref (xml));
}
g_object_set_qdata_full (G_OBJECT (object),
MOO_UI_OBJECT_UI_XML_QUARK,
g_object_ref (xml),
g_object_unref);
else
{
g_object_set_qdata (G_OBJECT (object),
MOO_UI_OBJECT_UI_XML_QUARK,
NULL);
}
g_object_notify (G_OBJECT (object), "ui-object-xml");
}
static void xml_changed (MooUIObject *object)
{
g_object_notify (G_OBJECT (object), "ui-object-xml");
}
static void disconnect_xml_changed (MooUIXML *xml,
gpointer object)
{
guint num;
g_assert (MOO_IS_UI_XML (xml));
num = g_signal_handlers_disconnect_by_func (xml, (gpointer) xml_changed, object);
g_assert (num == 1);
g_object_unref (xml);
}
/****************************************************************************/
typedef struct {

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/*
* mooui/moouixml.h
* moouixml.h
*
* Copyright (C) 2004-2005 by Yevgen Muntyan <muntyan@math.tamu.edu>
*
@ -11,8 +11,8 @@
* See COPYING file that comes with this distribution.
*/
#ifndef MOOUI_MOOUIXML_H
#define MOOUI_MOOUIXML_H
#ifndef __MOO_UI_XML_H__
#define __MOO_UI_XML_H__
#include "mooutils/moomarkup.h"
#include "mooui/mooactiongroup.h"
@ -21,6 +21,69 @@
G_BEGIN_DECLS
typedef enum {
MOO_UI_NODE_CONTAINER = 1,
MOO_UI_NODE_WIDGET,
MOO_UI_NODE_ITEM,
MOO_UI_NODE_SEPARATOR,
MOO_UI_NODE_PLACEHOLDER
} MooUINodeType;
typedef struct _MooUINode MooUINode;
typedef struct _MooUIWidgetNode MooUIWidgetNode;
typedef struct _MooUIItemNode MooUIItemNode;
typedef struct _MooUISeparatorNode MooUISeparatorNode;
typedef struct _MooUIPlaceholderNode MooUIPlaceholderNode;
struct _MooUINode {
MooUINodeType type;
char *name;
MooUINode *parent;
GSList *children;
};
struct _MooUIWidgetNode {
MooUINodeType type;
char *name;
MooUINode *parent;
GSList *children;
};
struct _MooUISeparatorNode {
MooUINodeType type;
char *name;
MooUINode *parent;
GSList *children;
};
struct _MooUIPlaceholderNode {
MooUINodeType type;
char *name;
MooUINode *parent;
GSList *children;
};
struct _MooUIItemNode {
MooUINodeType type;
char *name;
MooUINode *parent;
GSList *children;
char *action;
char *stock_id;
char *label;
char *icon_stock_id;
};
typedef enum {
MOO_UI_MENUBAR = 1,
MOO_UI_MENU,
MOO_UI_TOOLBAR
} MooUIWidgetType;
#define MOO_TYPE_UI_XML (moo_ui_xml_get_type ())
#define MOO_UI_XML(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MOO_TYPE_UI_XML, MooUIXML))
#define MOO_UI_XML_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOO_TYPE_UI_XML, MooUIXMLClass))
@ -36,53 +99,47 @@ typedef struct _MooUIXMLClass MooUIXMLClass;
struct _MooUIXML
{
GObject object;
MooMarkupDoc *doc;
MooUIXMLPrivate *priv;
};
struct _MooUIXMLClass
{
GObjectClass parent_class;
void (*changed) (MooUIXML *xml);
};
GType moo_ui_xml_get_type (void) G_GNUC_CONST;
GType moo_ui_xml_get_type (void) G_GNUC_CONST;
MooUIXML *moo_ui_xml_new (void);
MooUIXML *moo_ui_xml_new_from_string (const char *xml,
GError **error);
MooUIXML *moo_ui_xml_new_from_file (const char *file,
GError **error);
MooUIXML *moo_ui_xml_new (void);
gboolean moo_ui_xml_add_ui_from_string (MooUIXML *xml,
const char *ui,
int len,
GError **error);
gboolean moo_ui_xml_add_ui_from_file (MooUIXML *xml,
const char *file,
GError **error);
void moo_ui_xml_add_ui_from_string (MooUIXML *xml,
const char *buffer,
gssize length);
char *moo_ui_xml_get_ui (MooUIXML *xml);
const MooMarkupDoc *moo_ui_xml_get_markup (MooUIXML *xml);
MooUINode *moo_ui_xml_get_node (MooUIXML *xml,
const char *path);
gboolean moo_ui_xml_has_widget (MooUIXML *xml,
const char *path);
GtkWidget *moo_ui_xml_create_widget (MooUIXML *xml,
MooUIWidgetType type,
const char *path,
MooActionGroup *actions,
GtkAccelGroup *accel_group);
GtkWidget *moo_ui_xml_create_widget (MooUIXML *xml,
const char *path,
MooActionGroup *actions,
GtkAccelGroup *accel_group,
GtkTooltips *tooltips);
GtkWidget *moo_ui_xml_update_widget (MooUIXML *xml,
GtkWidget *widget,
const char *path,
MooActionGroup *actions,
GtkAccelGroup *accel_group,
GtkTooltips *tooltips);
guint moo_ui_xml_new_merge_id (MooUIXML *xml);
MooUINode *moo_ui_xml_add_item (MooUIXML *xml,
guint merge_id,
const char *parent_path,
const char *name,
const char *action,
int position);
void moo_ui_xml_remove_ui (MooUIXML *xml,
guint merge_id);
void moo_ui_xml_remove_node (MooUIXML *xml,
MooUINode *node);
G_END_DECLS
#endif /* MOOUI_MOOUIXML_H */
#endif /* __MOO_UI_XML_H__ */

View File

@ -53,37 +53,41 @@ struct _MooWindowPrivate {
guint save_size_id;
char *toolbar_ui_name;
char *menubar_ui_name;
GtkWidget *menubar_holder;
GtkWidget *toolbar_holder;
};
static void moo_window_class_init (MooWindowClass *klass);
GObject *moo_window_constructor (GType type,
guint n_props,
GObjectConstructParam *props);
static void moo_window_class_init (MooWindowClass *klass);
GObject *moo_window_constructor (GType type,
guint n_props,
GObjectConstructParam *props);
static void moo_window_init (MooWindow *window);
static void moo_window_finalize (GObject *object);
static void moo_window_init (MooWindow *window);
static void moo_window_finalize (GObject *object);
static void moo_window_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec);
static void moo_window_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec);
static void moo_window_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec);
static void moo_window_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec);
static gboolean moo_window_delete_event (GtkWidget *widget,
GdkEventAny *event);
static gboolean moo_window_delete_event (GtkWidget *widget,
GdkEventAny *event);
static gboolean moo_window_save_size (MooWindow *window);
static gboolean moo_window_save_size (MooWindow *window);
static void moo_window_shortcuts_prefs_dialog (MooWindow *window);
static gboolean moo_window_create_ui (MooWindow *window);
static void moo_window_show_menubar_toggled (MooWindow *window,
gboolean show);
static void moo_window_show_toolbar_toggled (MooWindow *window,
gboolean show);
static void moo_window_shortcuts_prefs_dialog (MooWindow *window);
static void moo_window_show_menubar_toggled (MooWindow *window,
gboolean show);
static void moo_window_show_toolbar_toggled (MooWindow *window,
gboolean show);
static GtkMenuItem *moo_window_create_toolbar_style_menu (MooWindow *window);
@ -283,17 +287,21 @@ GObject *moo_window_constructor (GType type,
gtk_window_add_accel_group (GTK_WINDOW (window),
window->accel_group);
window->tooltips = gtk_tooltips_new ();
g_object_ref (window->tooltips);
gtk_object_sink (GTK_OBJECT (window->tooltips));
vbox = gtk_vbox_new (FALSE, 0);
gtk_widget_show (vbox);
gtk_container_add (GTK_CONTAINER (window), vbox);
window->menubar = gtk_menu_bar_new ();
gtk_box_pack_start (GTK_BOX (vbox), window->menubar, FALSE, FALSE, 0);
window->toolbar = gtk_toolbar_new ();
gtk_box_pack_start (GTK_BOX (vbox), window->toolbar, FALSE, FALSE, 0);
window->priv->menubar_holder = gtk_vbox_new (FALSE, 0);
gtk_widget_show (window->priv->menubar_holder);
gtk_box_pack_start (GTK_BOX (vbox), window->priv->menubar_holder, FALSE, FALSE, 0);
window->priv->toolbar_holder = gtk_vbox_new (FALSE, 0);
gtk_widget_show (window->priv->toolbar_holder);
gtk_box_pack_start (GTK_BOX (vbox), window->priv->toolbar_holder, FALSE, FALSE, 0);
window->menubar = NULL;
window->toolbar = NULL;
window->vbox = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), window->vbox, TRUE, TRUE, 0);
window->statusbar = gtk_statusbar_new ();
@ -302,16 +310,15 @@ GObject *moo_window_constructor (GType type,
actions = moo_ui_object_get_actions (MOO_UI_OBJECT (window));
moo_action_group_set_accel_group (actions, window->accel_group);
moo_action_group_set_tooltips (actions, window->tooltips);
g_signal_connect (window, "notify::toolbar-ui-name",
G_CALLBACK (moo_window_update_ui), NULL);
G_CALLBACK (moo_window_create_ui), NULL);
g_signal_connect (window, "notify::menubar-ui-name",
G_CALLBACK (moo_window_update_ui), NULL);
G_CALLBACK (moo_window_create_ui), NULL);
g_signal_connect (window, "notify::ui-object-xml",
G_CALLBACK (moo_window_update_ui), NULL);
G_CALLBACK (moo_window_create_ui), NULL);
moo_window_update_ui (window);
g_idle_add ((GSourceFunc) moo_window_create_ui, window);
if (moo_prefs_get_bool (setting (window, PREFS_REMEMBER_SIZE)))
{
@ -346,8 +353,6 @@ static void moo_window_finalize (GObject *object)
if (window->accel_group)
g_object_unref (window->accel_group);
if (window->tooltips)
g_object_unref (window->tooltips);
if (window->priv->save_size_id)
g_source_remove (window->priv->save_size_id);
@ -512,41 +517,63 @@ static void moo_window_get_property (GObject *object,
}
void moo_window_update_ui (MooWindow *window)
static gboolean
moo_window_create_ui (MooWindow *window)
{
MooUIXML *xml;
MooAction *show_toolbar, *show_menubar;
GtkToolbarStyle style;
g_return_if_fail (MOO_IS_WINDOW (window));
g_return_val_if_fail (MOO_IS_WINDOW (window), FALSE);
xml = moo_ui_object_get_ui_xml (MOO_UI_OBJECT (window));
if (window->priv->menubar_ui_name && window->priv->menubar_ui_name[0] &&
moo_ui_xml_has_widget (xml, window->priv->menubar_ui_name))
if (window->menubar)
{
moo_ui_xml_update_widget (xml, window->menubar,
window->priv->menubar_ui_name,
moo_ui_object_get_actions (MOO_UI_OBJECT (window)),
window->accel_group, window->tooltips);
gtk_widget_destroy (window->menubar);
window->menubar = NULL;
}
if (window->toolbar)
{
gtk_widget_destroy (window->toolbar);
window->toolbar = NULL;
}
if (window->priv->menubar_ui_name && window->priv->menubar_ui_name[0])
{
window->menubar =
moo_ui_xml_create_widget (xml,
MOO_UI_MENUBAR,
window->priv->menubar_ui_name,
moo_ui_object_get_actions (MOO_UI_OBJECT (window)),
window->accel_group);
g_return_val_if_fail (window->menubar != NULL, FALSE);
gtk_box_pack_start (GTK_BOX (window->priv->menubar_holder),
window->menubar, FALSE, FALSE, 0);
gtk_widget_show (window->menubar);
show_menubar =
moo_action_group_get_action (moo_ui_object_get_actions (MOO_UI_OBJECT (window)),
"ShowMenubar");
moo_toggle_action_set_active (MOO_TOGGLE_ACTION (show_menubar),
moo_prefs_get_bool (setting (window, PREFS_SHOW_MENUBAR)));
}
else
{
gtk_widget_hide (window->menubar);
}
if (window->priv->toolbar_ui_name && window->priv->toolbar_ui_name[0] &&
moo_ui_xml_has_widget (xml, window->priv->toolbar_ui_name))
if (window->priv->toolbar_ui_name && window->priv->toolbar_ui_name[0])
{
moo_ui_xml_update_widget (xml, window->toolbar,
window->priv->toolbar_ui_name,
moo_ui_object_get_actions (MOO_UI_OBJECT (window)),
window->accel_group, window->tooltips);
window->toolbar =
moo_ui_xml_create_widget (xml,
MOO_UI_TOOLBAR,
window->priv->toolbar_ui_name,
moo_ui_object_get_actions (MOO_UI_OBJECT (window)),
window->accel_group);
g_return_val_if_fail (window->toolbar != NULL, FALSE);
gtk_box_pack_start (GTK_BOX (window->priv->toolbar_holder),
window->toolbar, FALSE, FALSE, 0);
gtk_widget_show (window->toolbar);
show_toolbar =
moo_action_group_get_action (moo_ui_object_get_actions (MOO_UI_OBJECT (window)),
@ -557,10 +584,8 @@ void moo_window_update_ui (MooWindow *window)
style = get_toolbar_style (window);
gtk_toolbar_set_style (GTK_TOOLBAR (MOO_WINDOW(window)->toolbar), style);
}
else
{
gtk_widget_hide (window->toolbar);
}
return FALSE;
}

View File

@ -37,7 +37,6 @@ struct _MooWindow
GtkWindow gtkwindow;
GtkAccelGroup *accel_group;
GtkTooltips *tooltips;
MooWindowPrivate *priv;
GtkWidget *menubar;

View File

@ -549,53 +549,6 @@ moo_markup_get_content (MooMarkupNode *node)
}
static MooMarkupElement*
get_element_by_names (MooMarkupNode *node,
char **path)
{
MooMarkupNode *child;
if (!path || !path[0] || !path[0][0])
return MOO_MARKUP_ELEMENT (node);
for (child = node->children; child; child = child->next)
{
if (MOO_MARKUP_IS_ELEMENT (child))
{
const char *name;
name = moo_markup_get_prop (child, "name");
if (name && !strcmp (path[0], name))
return get_element_by_names (child, ++path);
}
}
return NULL;
}
MooMarkupNode*
moo_markup_get_element_by_names (MooMarkupNode *node,
const char *path)
{
char **p;
MooMarkupElement *elm;
g_return_val_if_fail (path != NULL, NULL);
g_return_val_if_fail (MOO_MARKUP_IS_ELEMENT (node) ||
MOO_MARKUP_IS_DOC (node), NULL);
p = g_strsplit (path, "/", 0);
g_return_val_if_fail (p != NULL, NULL);
elm = get_element_by_names (node, p);
g_strfreev (p);
return (MooMarkupNode*) elm;
}
static MooMarkupElement*
get_element (MooMarkupNode *node,
char **path)

View File

@ -146,12 +146,6 @@ void moo_markup_doc_unref (MooMarkupDoc *doc);
MooMarkupNode *moo_markup_get_root_element (MooMarkupDoc *doc,
const char *name);
/* looks for element by 'name' attribute, e.g. elm2 in
<elm name="blah"> <elm2 name="blah2"/> ..
corresponds to "blah/blah2" */
MooMarkupNode *moo_markup_get_element_by_names (MooMarkupNode *node,
const char *path);
MooMarkupNode *moo_markup_get_element (MooMarkupNode *node,
const char *path);

View File

@ -2,9 +2,9 @@
<object name="Editor">
<menubar name="Menubar">
<widget name="Menubar">
<menu name="File" label="_File">
<item name="File" label="_File">
<separator/>
<item name="NewWindow" action="NewWindow"/>
<item name="NewTab" action="NewTab"/>
@ -23,9 +23,9 @@
<separator/>
<item name="Quit" action="Quit"/>
<separator/>
</menu>
</item>
<menu name="Edit" label="_Edit">
<item name="Edit" label="_Edit">
<separator/>
<item name="Undo" action="Undo"/>
<item name="Redo" action="Redo"/>
@ -38,9 +38,9 @@
<item name="SelectAll" action="SelectAll"/>
<separator/>
<item name="SendToTerminal" action="SendToTerminal"/>
</menu>
</item>
<menu name="Search" label="_Search">
<item name="Search" label="_Search">
<separator/>
<item name="Find" action="Find"/>
<item name="FindNext" action="FindNext"/>
@ -52,9 +52,9 @@
<item name="FindInFiles" action="FindInFiles"/>
<item name="FindFile" action="FindFile"/>
<separator/>
</menu>
</item>
<menu name="View" label="_View">
<item name="View" label="_View">
<separator/>
<item name="PreviousTab" action="PreviousTab"/>
<item name="NextTab" action="NextTab"/>
@ -63,9 +63,9 @@
<separator/>
<item name="ShowFileSelector" action="ShowFileSelector"/>
<separator/>
</menu>
</item>
<menu name="Project" label="_Project">
<item name="Project" label="_Project">
<separator/>
<item name="NewProject" action="NewProject"/>
<item name="OpenProject" action="OpenProject"/>
@ -76,27 +76,27 @@
<separator/>
<item name="CloseProject" action="CloseProject"/>
<separator/>
</menu>
</item>
<menu name="Build" label="_Build">
<item name="Build" label="_Build">
<separator/>
<item name="BuildProject" action="BuildProject"/>
<item name="CompileFile" action="CompileFile"/>
<separator/>
<item name="Execute" action="Execute"/>
<separator/>
</menu>
</item>
<menu name="Python" action="PythonMenu">
<item name="Python" action="PythonMenu">
<separator/>
<item name="ExecuteSelection" action="ExecuteSelection"/>
<item name="ExecuteScript" action="ExecuteScript"/>
<separator/>
<item name="ShowConsole" action="ShowConsole"/>
<separator/>
</menu>
</item>
<menu name="Settings" label="_Settings">
<item name="Settings" label="_Settings">
<separator/>
<item name="ShowToolbar" action="ShowToolbar"/>
<item name="ToolbarStyle" action="ToolbarStyle"/>
@ -105,17 +105,17 @@
<separator/>
<item name="Preferences" action="Preferences"/>
<separator/>
</menu>
</item>
<menu name="Help" label="_Help">
<item name="Help" label="_Help">
<separator/>
<item name="About" action="About"/>
<separator/>
</menu>
</item>
</menubar> <!-- Menubar -->
</widget> <!-- Menubar -->
<toolbar name="Toolbar">
<widget name="Toolbar">
<separator/>
<item name="NewTab" action="NewTab"/>
<separator/>
@ -134,15 +134,15 @@
<item name="Replace" action="Replace"/>
<separator/>
</toolbar> <!-- Toolbar -->
</widget> <!-- Toolbar -->
</object> <!-- Editor -->
<object name="Terminal">
<menubar name="Menubar">
<widget name="Menubar">
<menu name="File" label="_File">
<item name="File" label="_File">
<separator/>
<item name="Editor" action="NewEditor"/>
<item name="Open" action="OpenInEditor"/>
@ -153,9 +153,9 @@
<separator/>
<item name="Quit" action="Quit"/>
<separator/>
</menu>
</item>
<menu name="Edit" label="E_dit">
<item name="Edit" label="E_dit">
<separator/>
<!--
<item name="CopyLastOutput" action="CopyLastOutput"/>
@ -165,26 +165,26 @@
<separator/>
<item name="SelectAll" action="SelectAll"/>
<separator/>
</menu>
</item>
<!--
<menu name="GAP" label="_GAP">
<item name="GAP" label="_GAP">
<separator/>
<item name="Read" action="GAPRead"/>
<separator/>
<item name="Restart" action="Restart"/>
<separator/>
</menu>
</item>
-->
<menu name="Python" action="PythonMenu">
<item name="Python" action="PythonMenu">
<separator/>
<item name="Execute" action="ExecuteScript"/>
<item name="ShowConsole" action="ShowConsole"/>
<separator/>
</menu>
</item>
<menu name="Settings" label="_Settings">
<item name="Settings" label="_Settings">
<separator/>
<item name="ShowToolbar" action="ShowToolbar"/>
<item name="ToolbarStyle" action="ToolbarStyle"/>
@ -193,17 +193,17 @@
<separator/>
<item name="Preferences" action="Preferences"/>
<separator/>
</menu>
</item>
<menu name="Help" label="_Help">
<item name="Help" label="_Help">
<separator/>
<item name="About" action="About"/>
<separator/>
</menu>
</item>
</menubar> <!-- Menubar -->
</widget> <!-- Menubar -->
<toolbar name="Toolbar">
<widget name="Toolbar">
<separator/>
<item name="Editor" action="NewEditor"/>
<item name="Open" action="OpenInEditor"/>
@ -215,16 +215,16 @@
<separator/>
<item name="Preferences" action="Preferences"/>
<separator/>
</toolbar> <!-- Toolbar -->
</widget> <!-- Toolbar -->
<menu name="Popup">
<widget name="Popup">
<separator/>
<item name="Copy" action="Copy"/>
<item name="Paste" action="Paste"/>
<separator/>
<item name="SelectAll" action="SelectAll"/>
<separator/>
</menu>
</widget>
</object> <!-- Terminal -->

View File

@ -21,7 +21,7 @@
static void init_actions (void);
static void ref_types (void);
static void ref_stuff (void);
int main (int argc, char **argv)
{
@ -37,7 +37,8 @@ int main (int argc, char **argv)
moo_prefs_load (rcfile, NULL);
init_actions ();
ref_types ();
if (argc > 1000)
ref_stuff ();
plugin_dir = g_build_filename (g_get_home_dir (), ".medit", "plugins", NULL);
moo_plugin_read_dir ("@MOO_PLUGINS_DIR@");
@ -54,8 +55,7 @@ int main (int argc, char **argv)
g_signal_connect (editor, "all-windows-closed", G_CALLBACK (gtk_main_quit), NULL);
xml = moo_editor_get_ui_xml (editor);
if (!moo_ui_xml_add_ui_from_string (xml, MEDIT_UI, -1, NULL))
g_error ("%s", G_STRLOC);
moo_ui_xml_add_ui_from_string (xml, MEDIT_UI, -1);
win = moo_editor_new_window (editor);
@ -131,8 +131,8 @@ static void init_actions (void)
}
static void ref_types (void)
static void ref_stuff (void)
{
volatile gpointer p = moo_pane_view_new;
g_return_if_fail (p != NULL);
moo_pane_view_new ();
moo_markup_create_file_element (NULL, NULL, NULL);
}