MooActionCollection - object containing bunch of actions groups; MooActionBase - interface used by all actions in moo; MooAction, MooToggleAction, MooRadioAction - subclasses of corresponding gtk classes implementing MooActionBase interface.
parent
a402f1ad3f
commit
b9ffc63ecb
|
@ -293,16 +293,16 @@
|
|||
</kdevdoctreeview>
|
||||
<kdevfilecreate>
|
||||
<filetypes>
|
||||
<type icon="source" ext="g" name="GAP source" create="template" >
|
||||
<type icon="source" ext="g" create="template" name="GAP source" >
|
||||
<descr>A new empty GAP source file</descr>
|
||||
</type>
|
||||
<type icon="source_cpp" ext="cpp" name="C++ Source" create="template" >
|
||||
<type icon="source_cpp" ext="cpp" create="template" name="C++ Source" >
|
||||
<descr>A new empty C++ file.</descr>
|
||||
</type>
|
||||
<type icon="source_h" ext="h" name="C/C++ Header" create="template" >
|
||||
<type icon="source_h" ext="h" create="template" name="C/C++ Header" >
|
||||
<descr>A new empty header file for C/C++.</descr>
|
||||
</type>
|
||||
<type icon="source_c" ext="c" name="C Source" create="template" >
|
||||
<type icon="source_c" ext="c" create="template" name="C Source" >
|
||||
<descr>A new empty C file.</descr>
|
||||
</type>
|
||||
</filetypes>
|
||||
|
|
|
@ -46,6 +46,8 @@
|
|||
|
||||
#include <mooutils/mooaccelbutton.h>
|
||||
#include <mooutils/mooaction.h>
|
||||
#include <mooutils/mooactionbase.h>
|
||||
#include <mooutils/mooactioncollection.h>
|
||||
#include <mooutils/moobigpaned.h>
|
||||
#include <mooutils/mooclosure.h>
|
||||
#include <mooutils/moocmd.h>
|
||||
|
|
|
@ -1234,16 +1234,16 @@ install_actions (MooApp *app,
|
|||
|
||||
_about = g_strdup_printf (Q_("Menu item label|_About %s"), app->priv->info->full_name);
|
||||
|
||||
moo_window_class_new_action (klass, "Preferences",
|
||||
"stock-display-name", GTK_STOCK_PREFERENCES,
|
||||
"stock-label", GTK_STOCK_PREFERENCES,
|
||||
"stock-tooltip", GTK_STOCK_PREFERENCES,
|
||||
moo_window_class_new_action (klass, "Preferences", NULL,
|
||||
"display-name", GTK_STOCK_PREFERENCES,
|
||||
"label", GTK_STOCK_PREFERENCES,
|
||||
"tooltip", GTK_STOCK_PREFERENCES,
|
||||
"stock-id", GTK_STOCK_PREFERENCES,
|
||||
"closure-callback", moo_app_prefs_dialog,
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (klass, "About",
|
||||
"stock-display-name", GTK_STOCK_ABOUT,
|
||||
moo_window_class_new_action (klass, "About", NULL,
|
||||
"display-name", GTK_STOCK_ABOUT,
|
||||
"label", _about,
|
||||
"no-accel", TRUE,
|
||||
"stock-id", GTK_STOCK_ABOUT,
|
||||
|
@ -1263,10 +1263,10 @@ install_editor_actions (MooApp *app)
|
|||
|
||||
g_return_if_fail (klass != NULL);
|
||||
|
||||
moo_window_class_new_action (klass, "Quit",
|
||||
"stock-display-name", GTK_STOCK_QUIT,
|
||||
"stock-label", GTK_STOCK_QUIT,
|
||||
"stock-tooltip", GTK_STOCK_QUIT,
|
||||
moo_window_class_new_action (klass, "Quit", NULL,
|
||||
"display-name", GTK_STOCK_QUIT,
|
||||
"label", GTK_STOCK_QUIT,
|
||||
"tooltip", GTK_STOCK_QUIT,
|
||||
"stock-id", GTK_STOCK_QUIT,
|
||||
"accel", "<ctrl>Q",
|
||||
"closure-callback", moo_app_quit,
|
||||
|
@ -1306,7 +1306,7 @@ install_terminal_actions (MooApp *app)
|
|||
|
||||
install_actions (app, MOO_TYPE_TERM_WINDOW);
|
||||
|
||||
moo_window_class_new_action (klass, "NewEditor",
|
||||
moo_window_class_new_action (klass, "NewEditor", NULL,
|
||||
"display-name", "New Editor",
|
||||
"label", "_New Editor",
|
||||
"tooltip", "New Editor",
|
||||
|
@ -1316,7 +1316,7 @@ install_terminal_actions (MooApp *app)
|
|||
"closure-proxy-func", moo_app_get_instance,
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (klass, "OpenInEditor",
|
||||
moo_window_class_new_action (klass, "OpenInEditor", NULL,
|
||||
"display-name", "Open In Editor",
|
||||
"label", "_Open In Editor",
|
||||
"tooltip", "Open In Editor",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "mooapp/mooappinput.h"
|
||||
#include "mooapp/mooapp.h"
|
||||
#define MOO_APP_COMPILATION
|
||||
#include "mooapp/mooapp-private.h"
|
||||
|
||||
|
||||
struct _MooAppInput
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "mooutils/moocompat.h"
|
||||
#include "mooutils/moomarshals.h"
|
||||
#include "mooutils/mooactionfactory.h"
|
||||
#include "mooutils/mooactionbase.h"
|
||||
#include <string.h>
|
||||
#include <gobject/gvaluecollector.h>
|
||||
|
||||
|
@ -117,11 +118,21 @@ create_action (const char *action_id,
|
|||
g_return_val_if_fail (MOO_IS_ACTION_FACTORY (info->action), NULL);
|
||||
g_return_val_if_fail (action_id && action_id[0], NULL);
|
||||
|
||||
if (g_type_is_a (info->action->action_type, MOO_TYPE_ACTION))
|
||||
action = moo_action_factory_create_action (info->action, edit,
|
||||
"closure-object", edit,
|
||||
"name", action_id,
|
||||
NULL);
|
||||
else if (g_type_is_a (info->action->action_type, MOO_TYPE_TOGGLE_ACTION))
|
||||
action = moo_action_factory_create_action (info->action, edit,
|
||||
"toggled-object", edit,
|
||||
"name", action_id,
|
||||
NULL);
|
||||
else
|
||||
action = moo_action_factory_create_action (info->action, edit,
|
||||
"name", action_id,
|
||||
NULL);
|
||||
|
||||
g_return_val_if_fail (action != NULL, NULL);
|
||||
|
||||
if (g_type_is_a (info->action->action_type, MOO_TYPE_EDIT_ACTION))
|
||||
|
@ -248,9 +259,9 @@ moo_edit_class_new_actionv (MooEditClass *klass,
|
|||
|
||||
action_type = moo_value_get_gtype (¶m.value);
|
||||
|
||||
if (!g_type_is_a (action_type, GTK_TYPE_ACTION))
|
||||
if (!g_type_is_a (action_type, MOO_TYPE_ACTION_BASE))
|
||||
{
|
||||
g_warning ("%s: invalid action type", G_STRLOC);
|
||||
g_warning ("%s: invalid action type %s", G_STRLOC, g_type_name (action_type));
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -289,7 +300,7 @@ moo_edit_class_new_actionv (MooEditClass *klass,
|
|||
action_class = g_type_class_ref (action_type);
|
||||
}
|
||||
|
||||
pspec = _moo_action_find_property (action_class, name);
|
||||
pspec = g_object_class_find_property (action_class, name);
|
||||
|
||||
if (!pspec)
|
||||
{
|
||||
|
@ -486,7 +497,7 @@ GtkActionGroup *
|
|||
moo_edit_get_actions (MooEdit *edit)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_EDIT (edit), NULL);
|
||||
return edit->priv->actions;
|
||||
return moo_action_collection_get_group (edit->priv->actions, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
@ -544,7 +555,7 @@ _moo_edit_add_class_actions (MooEdit *edit)
|
|||
void
|
||||
_moo_edit_check_actions (MooEdit *edit)
|
||||
{
|
||||
GList *actions = gtk_action_group_list_actions (edit->priv->actions);
|
||||
GList *actions = moo_action_collection_list_actions (edit->priv->actions);
|
||||
|
||||
while (actions)
|
||||
{
|
||||
|
@ -611,7 +622,7 @@ _moo_edit_class_init_actions (MooEditClass *klass)
|
|||
/* MooEditAction
|
||||
*/
|
||||
|
||||
G_DEFINE_TYPE (MooEditAction, moo_edit_action, GTK_TYPE_ACTION);
|
||||
G_DEFINE_TYPE (MooEditAction, moo_edit_action, MOO_TYPE_ACTION);
|
||||
|
||||
enum {
|
||||
CHECK_STATE,
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#ifndef __MOO_EDIT_ACTIONS_H__
|
||||
#define __MOO_EDIT_ACTIONS_H__
|
||||
|
||||
#include <mooutils/mooaction.h>
|
||||
#include <mooutils/moouixml.h>
|
||||
#include <mooedit/mooedit.h>
|
||||
|
||||
|
@ -38,7 +39,7 @@ typedef enum {
|
|||
|
||||
struct _MooEditAction
|
||||
{
|
||||
GtkAction parent;
|
||||
MooAction parent;
|
||||
MooEdit *doc;
|
||||
GSList *langs;
|
||||
MooEditActionFlags flags;
|
||||
|
@ -46,7 +47,7 @@ struct _MooEditAction
|
|||
|
||||
struct _MooEditActionClass
|
||||
{
|
||||
GtkActionClass parent_class;
|
||||
MooActionClass parent_class;
|
||||
|
||||
gboolean (*check_state) (MooEditAction *action);
|
||||
};
|
||||
|
|
|
@ -149,7 +149,7 @@ struct _MooEditPrivate {
|
|||
/* Actions
|
||||
/*/
|
||||
GtkMenu *menu;
|
||||
GtkActionGroup *actions;
|
||||
MooActionCollection *actions;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -243,7 +243,7 @@ moo_edit_init (MooEdit *edit)
|
|||
|
||||
edit->priv->file_watch_policy = MOO_EDIT_RELOAD_IF_SAFE;
|
||||
|
||||
edit->priv->actions = gtk_action_group_new ("MooEdit");
|
||||
edit->priv->actions = moo_action_collection_new ("MooEdit", "MooEdit");
|
||||
|
||||
indent = moo_indenter_new (edit, NULL);
|
||||
moo_text_view_set_indenter (MOO_TEXT_VIEW (edit), indent);
|
||||
|
@ -1920,7 +1920,7 @@ _moo_edit_do_popup (MooEdit *edit,
|
|||
window = moo_edit_get_window (edit);
|
||||
edit->priv->menu =
|
||||
moo_ui_xml_create_widget (xml, MOO_UI_MENU, "Editor/Popup",
|
||||
moo_edit_get_actions (edit),
|
||||
edit->priv->actions,
|
||||
window ? MOO_WINDOW(window)->accel_group : NULL);
|
||||
gtk_object_sink (g_object_ref (edit->priv->menu));
|
||||
|
||||
|
|
|
@ -256,7 +256,7 @@ moo_editor_class_init (MooEditorClass *klass)
|
|||
G_TYPE_NONE, 0);
|
||||
|
||||
edit_window_class = g_type_class_ref (MOO_TYPE_EDIT_WINDOW);
|
||||
moo_window_class_new_action_custom (edit_window_class, RECENT_ACTION_ID,
|
||||
moo_window_class_new_action_custom (edit_window_class, RECENT_ACTION_ID, NULL,
|
||||
(MooWindowActionFunc) create_recent_action,
|
||||
NULL, NULL);
|
||||
g_type_class_unref (edit_window_class);
|
||||
|
@ -572,7 +572,7 @@ add_new_window_action (void)
|
|||
klass = g_type_class_peek (MOO_TYPE_EDIT_WINDOW);
|
||||
|
||||
if (!moo_window_class_find_action (klass, "NewWindow"))
|
||||
moo_window_class_new_action (klass, "NewWindow",
|
||||
moo_window_class_new_action (klass, "NewWindow", NULL,
|
||||
"display-name", "New Window",
|
||||
"label", "_New Window",
|
||||
"tooltip", "Open new editor window",
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include "mooutils/moocompat.h"
|
||||
#include "mooutils/mooglade.h"
|
||||
#include "mooutils/mooi18n.h"
|
||||
#include "mooutils/mooaction-private.h"
|
||||
#include "moofileview/moofile.h"
|
||||
#include <string.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
@ -357,7 +358,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
|
||||
moo_window_class_set_id (window_class, "Editor", "Editor");
|
||||
|
||||
moo_window_class_new_action (window_class, "NewDoc",
|
||||
moo_window_class_new_action (window_class, "NewDoc", NULL,
|
||||
"display-name", Q_("New document|New"),
|
||||
"label", Q_("New document|New"),
|
||||
"tooltip", _("Create new document"),
|
||||
|
@ -366,8 +367,8 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"closure-callback", action_new_doc,
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Open",
|
||||
"stock-display-name", GTK_STOCK_OPEN,
|
||||
moo_window_class_new_action (window_class, "Open", NULL,
|
||||
"display-name", GTK_STOCK_OPEN,
|
||||
"label", _("_Open..."),
|
||||
"tooltip", _("Open..."),
|
||||
"stock-id", GTK_STOCK_OPEN,
|
||||
|
@ -375,7 +376,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"closure-callback", action_open,
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Reload",
|
||||
moo_window_class_new_action (window_class, "Reload", NULL,
|
||||
"display-name", _("Reload"),
|
||||
"label", _("_Reload"),
|
||||
"tooltip", _("Reload document"),
|
||||
|
@ -385,18 +386,18 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "can-reload",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Save",
|
||||
"stock-display-name", GTK_STOCK_SAVE,
|
||||
"stock-label", GTK_STOCK_SAVE,
|
||||
"stock-tooltip", GTK_STOCK_SAVE,
|
||||
moo_window_class_new_action (window_class, "Save", NULL,
|
||||
"display-name", GTK_STOCK_SAVE,
|
||||
"label", GTK_STOCK_SAVE,
|
||||
"tooltip", GTK_STOCK_SAVE,
|
||||
"stock-id", GTK_STOCK_SAVE,
|
||||
"accel", "<ctrl>S",
|
||||
"closure-callback", action_save,
|
||||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "SaveAs",
|
||||
"stock-display-name", GTK_STOCK_SAVE_AS,
|
||||
moo_window_class_new_action (window_class, "SaveAs", NULL,
|
||||
"display-name", GTK_STOCK_SAVE_AS,
|
||||
"label", _("Save _As..."),
|
||||
"tooltip", _("Save as..."),
|
||||
"stock-id", GTK_STOCK_SAVE_AS,
|
||||
|
@ -405,9 +406,9 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Close",
|
||||
"stock-display-name", GTK_STOCK_CLOSE,
|
||||
"stock-label", GTK_STOCK_CLOSE,
|
||||
moo_window_class_new_action (window_class, "Close", NULL,
|
||||
"display-name", GTK_STOCK_CLOSE,
|
||||
"label", GTK_STOCK_CLOSE,
|
||||
"tooltip", _("Close document"),
|
||||
"stock-id", GTK_STOCK_CLOSE,
|
||||
"accel", "<ctrl>W",
|
||||
|
@ -415,7 +416,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "CloseAll",
|
||||
moo_window_class_new_action (window_class, "CloseAll", NULL,
|
||||
"display-name", _("Close All"),
|
||||
"label", _("Close _All"),
|
||||
"tooltip", _("Close all documents"),
|
||||
|
@ -424,10 +425,10 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Undo",
|
||||
"stock-display-name", GTK_STOCK_UNDO,
|
||||
"stock-label", GTK_STOCK_UNDO,
|
||||
"stock-tooltip", GTK_STOCK_UNDO,
|
||||
moo_window_class_new_action (window_class, "Undo", NULL,
|
||||
"display-name", GTK_STOCK_UNDO,
|
||||
"label", GTK_STOCK_UNDO,
|
||||
"tooltip", GTK_STOCK_UNDO,
|
||||
"stock-id", GTK_STOCK_UNDO,
|
||||
"accel", "<ctrl>Z",
|
||||
"closure-signal", "undo",
|
||||
|
@ -435,10 +436,10 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "can-undo",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Redo",
|
||||
"stock-display-name", GTK_STOCK_REDO,
|
||||
"stock-label", GTK_STOCK_REDO,
|
||||
"stock-tooltip", GTK_STOCK_REDO,
|
||||
moo_window_class_new_action (window_class, "Redo", NULL,
|
||||
"display-name", GTK_STOCK_REDO,
|
||||
"label", GTK_STOCK_REDO,
|
||||
"tooltip", GTK_STOCK_REDO,
|
||||
"stock-id", GTK_STOCK_REDO,
|
||||
"accel", "<shift><ctrl>Z",
|
||||
"closure-signal", "redo",
|
||||
|
@ -446,10 +447,10 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "can-redo",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Cut",
|
||||
"stock-display-name", GTK_STOCK_CUT,
|
||||
"stock-label", GTK_STOCK_CUT,
|
||||
"stock-tooltip", GTK_STOCK_CUT,
|
||||
moo_window_class_new_action (window_class, "Cut", NULL,
|
||||
"display-name", GTK_STOCK_CUT,
|
||||
"label", GTK_STOCK_CUT,
|
||||
"tooltip", GTK_STOCK_CUT,
|
||||
"stock-id", GTK_STOCK_CUT,
|
||||
"accel", "<ctrl>X",
|
||||
"closure-signal", "cut-clipboard",
|
||||
|
@ -457,10 +458,10 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-selection",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Copy",
|
||||
"stock-display-name", GTK_STOCK_COPY,
|
||||
"stock-label", GTK_STOCK_COPY,
|
||||
"stock-tooltip", GTK_STOCK_COPY,
|
||||
moo_window_class_new_action (window_class, "Copy", NULL,
|
||||
"display-name", GTK_STOCK_COPY,
|
||||
"label", GTK_STOCK_COPY,
|
||||
"tooltip", GTK_STOCK_COPY,
|
||||
"stock-id", GTK_STOCK_COPY,
|
||||
"accel", "<ctrl>C",
|
||||
"closure-signal", "copy-clipboard",
|
||||
|
@ -468,10 +469,10 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-selection",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Paste",
|
||||
"stock-display-name", GTK_STOCK_PASTE,
|
||||
"stock-label", GTK_STOCK_PASTE,
|
||||
"stock-tooltip", GTK_STOCK_PASTE,
|
||||
moo_window_class_new_action (window_class, "Paste", NULL,
|
||||
"display-name", GTK_STOCK_PASTE,
|
||||
"label", GTK_STOCK_PASTE,
|
||||
"tooltip", GTK_STOCK_PASTE,
|
||||
"stock-id", GTK_STOCK_PASTE,
|
||||
"accel", "<ctrl>V",
|
||||
"closure-signal", "paste-clipboard",
|
||||
|
@ -479,17 +480,17 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Delete",
|
||||
"stock-display-name", GTK_STOCK_DELETE,
|
||||
"stock-label", GTK_STOCK_DELETE,
|
||||
"stock-tooltip", GTK_STOCK_DELETE,
|
||||
moo_window_class_new_action (window_class, "Delete", NULL,
|
||||
"display-name", GTK_STOCK_DELETE,
|
||||
"label", GTK_STOCK_DELETE,
|
||||
"tooltip", GTK_STOCK_DELETE,
|
||||
"stock-id", GTK_STOCK_DELETE,
|
||||
"closure-signal", "delete-selection",
|
||||
"closure-proxy-func", moo_edit_window_get_active_doc,
|
||||
"condition::sensitive", "has-selection",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "SelectAll",
|
||||
moo_window_class_new_action (window_class, "SelectAll", NULL,
|
||||
"display-name", _("Select All"),
|
||||
"label", _("Select _All"),
|
||||
"tooltip", _("Select all"),
|
||||
|
@ -499,7 +500,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-text",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "PreviousTab",
|
||||
moo_window_class_new_action (window_class, "PreviousTab", NULL,
|
||||
"display-name", _("Previous Tab"),
|
||||
"label", _("_Previous Tab"),
|
||||
"tooltip", _("Previous tab"),
|
||||
|
@ -509,7 +510,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "NextTab",
|
||||
moo_window_class_new_action (window_class, "NextTab", NULL,
|
||||
"display-name", _("Next Tab"),
|
||||
"label", _("_Next Tab"),
|
||||
"tooltip", _("Next tab"),
|
||||
|
@ -519,10 +520,10 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Find",
|
||||
"stock-display-name", GTK_STOCK_FIND,
|
||||
"stock-label", GTK_STOCK_FIND,
|
||||
"stock-tooltip", GTK_STOCK_FIND,
|
||||
moo_window_class_new_action (window_class, "Find", NULL,
|
||||
"display-name", GTK_STOCK_FIND,
|
||||
"label", GTK_STOCK_FIND,
|
||||
"tooltip", GTK_STOCK_FIND,
|
||||
"stock-id", GTK_STOCK_FIND,
|
||||
"accel", "<ctrl>F",
|
||||
"closure-signal", "find-interactive",
|
||||
|
@ -530,7 +531,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "FindNext",
|
||||
moo_window_class_new_action (window_class, "FindNext", NULL,
|
||||
"display-name", _("Find Next"),
|
||||
"label", ("Find _Next"),
|
||||
"tooltip", _("Find next"),
|
||||
|
@ -541,7 +542,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "FindPrevious",
|
||||
moo_window_class_new_action (window_class, "FindPrevious", NULL,
|
||||
"display-name", _("Find Previous"),
|
||||
"label", _("Find _Previous"),
|
||||
"tooltip", _("Find previous"),
|
||||
|
@ -552,10 +553,10 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Replace",
|
||||
"stock-display-name", GTK_STOCK_FIND_AND_REPLACE,
|
||||
"stock-label", GTK_STOCK_FIND_AND_REPLACE,
|
||||
"stock-tooltip", GTK_STOCK_FIND_AND_REPLACE,
|
||||
moo_window_class_new_action (window_class, "Replace", NULL,
|
||||
"display-name", GTK_STOCK_FIND_AND_REPLACE,
|
||||
"label", GTK_STOCK_FIND_AND_REPLACE,
|
||||
"tooltip", GTK_STOCK_FIND_AND_REPLACE,
|
||||
"stock-id", GTK_STOCK_FIND_AND_REPLACE,
|
||||
"accel", "<ctrl>R",
|
||||
"closure-signal", "replace-interactive",
|
||||
|
@ -563,7 +564,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "FindCurrent",
|
||||
moo_window_class_new_action (window_class, "FindCurrent", NULL,
|
||||
"display-name", _("Find Current Word"),
|
||||
"label", _("Find Current _Word"),
|
||||
"stock-id", GTK_STOCK_FIND,
|
||||
|
@ -572,7 +573,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "FindCurrentBack",
|
||||
moo_window_class_new_action (window_class, "FindCurrentBack", NULL,
|
||||
"display-name", _("Find Current Word Backwards"),
|
||||
"label", _("Find Current Word _Backwards"),
|
||||
"stock-id", GTK_STOCK_FIND,
|
||||
|
@ -581,7 +582,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "GoToLine",
|
||||
moo_window_class_new_action (window_class, "GoToLine", NULL,
|
||||
"display-name", _("Go to Line"),
|
||||
"label", _("_Go to Line"),
|
||||
"tooltip", _("Go to line"),
|
||||
|
@ -591,23 +592,23 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "WrapText",
|
||||
"action-type::", GTK_TYPE_TOGGLE_ACTION,
|
||||
moo_window_class_new_action (window_class, "WrapText", NULL,
|
||||
"action-type::", MOO_TYPE_TOGGLE_ACTION,
|
||||
"display-name", _("Toggle Text Wrapping"),
|
||||
"label", _("_Wrap Text"),
|
||||
"toggled-callback", wrap_text_toggled,
|
||||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "LineNumbers",
|
||||
"action-type::", GTK_TYPE_TOGGLE_ACTION,
|
||||
moo_window_class_new_action (window_class, "LineNumbers", NULL,
|
||||
"action-type::", MOO_TYPE_TOGGLE_ACTION,
|
||||
"display-name", _("Toggle Line Numbers Display"),
|
||||
"label", _("_Show Line Numbers"),
|
||||
"toggled-callback", line_numbers_toggled,
|
||||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "FocusDoc",
|
||||
moo_window_class_new_action (window_class, "FocusDoc", NULL,
|
||||
"display-name", _("Focus Doc"),
|
||||
"label", _("_Focus Doc"),
|
||||
"tooltip", _("Focus Doc"),
|
||||
|
@ -617,10 +618,10 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, STOP_ACTION_ID,
|
||||
"stock-display-name", GTK_STOCK_STOP,
|
||||
"stock-label", GTK_STOCK_STOP,
|
||||
"stock-tooltip", GTK_STOCK_STOP,
|
||||
moo_window_class_new_action (window_class, STOP_ACTION_ID, NULL,
|
||||
"display-name", GTK_STOCK_STOP,
|
||||
"label", GTK_STOCK_STOP,
|
||||
"tooltip", GTK_STOCK_STOP,
|
||||
"stock-id", GTK_STOCK_STOP,
|
||||
"accel", "Escape",
|
||||
"closure-callback", action_abort_jobs,
|
||||
|
@ -628,7 +629,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::visible", "has-stop-clients",
|
||||
NULL);
|
||||
|
||||
// moo_window_class_new_action (window_class, "ToggleBookmark",
|
||||
// moo_window_class_new_action (window_class, "ToggleBookmark", NULL,
|
||||
// "display-name", "Toggle Bookmark",
|
||||
// "label", "Toggle Bookmark",
|
||||
// "tooltip", "Toggle bookmark",
|
||||
|
@ -638,7 +639,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
// "condition::sensitive", "has-open-document",
|
||||
// NULL);
|
||||
//
|
||||
// moo_window_class_new_action (window_class, "NextBookmark",
|
||||
// moo_window_class_new_action (window_class, "NextBookmark", NULL,
|
||||
// "display-name", "Next Bookmark",
|
||||
// "label", "Next Bookmark",
|
||||
// "tooltip", "Next bookmark",
|
||||
|
@ -648,7 +649,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
// "condition::visible", "has-open-document",
|
||||
// NULL);
|
||||
//
|
||||
// moo_window_class_new_action (window_class, "PreviousBookmark",
|
||||
// moo_window_class_new_action (window_class, "PreviousBookmark", NULL,
|
||||
// "display-name", "Previous Bookmark",
|
||||
// "label", "Previous Bookmark",
|
||||
// "tooltip", "Previous bookmark",
|
||||
|
@ -658,7 +659,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
// "condition::visible", "has-open-document",
|
||||
// NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "NextPlaceholder",
|
||||
moo_window_class_new_action (window_class, "NextPlaceholder", NULL,
|
||||
"display-name", _("Next Placeholder"),
|
||||
"label", _("Next Placeholder"),
|
||||
"tooltip", _("Go to next placeholder"),
|
||||
|
@ -667,7 +668,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::visible", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "PrevPlaceholder",
|
||||
moo_window_class_new_action (window_class, "PrevPlaceholder", NULL,
|
||||
"display-name", _("Previous Placeholder"),
|
||||
"label", _("Previous Placeholder"),
|
||||
"tooltip", _("Go to previous placeholder"),
|
||||
|
@ -676,7 +677,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::visible", "has-open-document",
|
||||
NULL);
|
||||
|
||||
// moo_window_class_new_action (window_class, "QuickSearch",
|
||||
// moo_window_class_new_action (window_class, "QuickSearch", NULL,
|
||||
// "display-name", "Quick Search",
|
||||
// "label", "Quick Search",
|
||||
// "tooltip", "Quick search",
|
||||
|
@ -687,7 +688,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
// "condition::sensitive", "has-open-document",
|
||||
// NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Comment",
|
||||
moo_window_class_new_action (window_class, "Comment", NULL,
|
||||
"display-name", _("Comment"),
|
||||
"label", _("Comment"),
|
||||
"tooltip", _("Comment"),
|
||||
|
@ -696,7 +697,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-comments",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Uncomment",
|
||||
moo_window_class_new_action (window_class, "Uncomment", NULL,
|
||||
"display-name", _("Uncomment"),
|
||||
"label", _("Uncomment"),
|
||||
"tooltip", _("Uncomment"),
|
||||
|
@ -705,35 +706,33 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-comments",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Indent",
|
||||
"stock-display-name", GTK_STOCK_INDENT,
|
||||
"stock-label", GTK_STOCK_INDENT,
|
||||
"stock-tooltip", GTK_STOCK_INDENT,
|
||||
moo_window_class_new_action (window_class, "Indent", NULL,
|
||||
"display-name", GTK_STOCK_INDENT,
|
||||
"label", GTK_STOCK_INDENT,
|
||||
"tooltip", GTK_STOCK_INDENT,
|
||||
"stock-id", GTK_STOCK_INDENT,
|
||||
"accel", "<ctrl>i",
|
||||
"closure-callback", moo_text_view_indent,
|
||||
"closure-proxy-func", moo_edit_window_get_active_doc,
|
||||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Unindent",
|
||||
"stock-display-name", GTK_STOCK_UNINDENT,
|
||||
"stock-label", GTK_STOCK_UNINDENT,
|
||||
"stock-tooltip", GTK_STOCK_UNINDENT,
|
||||
moo_window_class_new_action (window_class, "Unindent", NULL,
|
||||
"display-name", GTK_STOCK_UNINDENT,
|
||||
"label", GTK_STOCK_UNINDENT,
|
||||
"tooltip", GTK_STOCK_UNINDENT,
|
||||
"stock-id", GTK_STOCK_UNINDENT,
|
||||
"accel", "<shift><ctrl>i",
|
||||
"closure-callback", moo_text_view_unindent,
|
||||
"closure-proxy-func", moo_edit_window_get_active_doc,
|
||||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "NoDocuments",
|
||||
moo_window_class_new_action (window_class, "NoDocuments", NULL,
|
||||
"label", _("No Documents"),
|
||||
"no-accel", TRUE,
|
||||
NULL);
|
||||
|
||||
#ifdef ENABLE_PRINTING
|
||||
moo_window_class_new_action (window_class, "PageSetup",
|
||||
moo_window_class_new_action (window_class, "PageSetup", NULL,
|
||||
"display-name", _("Page Setup"),
|
||||
"label", _("Page Setup"),
|
||||
"tooltip", _("Page Setup"),
|
||||
|
@ -741,10 +740,10 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"closure-callback", action_page_setup,
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Print",
|
||||
"stock-display-name", GTK_STOCK_PRINT,
|
||||
"stock-label", GTK_STOCK_PRINT,
|
||||
"stock-tooltip", GTK_STOCK_PRINT,
|
||||
moo_window_class_new_action (window_class, "Print", NULL,
|
||||
"display-name", GTK_STOCK_PRINT,
|
||||
"label", GTK_STOCK_PRINT,
|
||||
"tooltip", GTK_STOCK_PRINT,
|
||||
"accel", "<ctrl>P",
|
||||
"stock-id", GTK_STOCK_PRINT,
|
||||
"closure-callback", action_print,
|
||||
|
@ -752,7 +751,7 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
NULL);
|
||||
#endif
|
||||
|
||||
moo_window_class_new_action_custom (window_class, LANG_ACTION_ID,
|
||||
moo_window_class_new_action_custom (window_class, LANG_ACTION_ID, NULL,
|
||||
(MooWindowActionFunc) create_lang_action,
|
||||
NULL, NULL);
|
||||
}
|
||||
|
@ -1843,7 +1842,7 @@ _moo_edit_window_remove_doc (MooEditWindow *window,
|
|||
|
||||
if (action)
|
||||
{
|
||||
gtk_action_group_remove_action (moo_window_get_actions (MOO_WINDOW (window)), action);
|
||||
moo_action_collection_remove_action (moo_window_get_actions (MOO_WINDOW (window)), action);
|
||||
g_object_set_data (G_OBJECT (doc), "moo-doc-list-action", NULL);
|
||||
}
|
||||
|
||||
|
@ -3336,17 +3335,19 @@ do_update_doc_list (MooEditWindow *window)
|
|||
}
|
||||
else
|
||||
{
|
||||
GtkActionGroup *group;
|
||||
char *name = g_strdup_printf ("MooEdit-%p", doc);
|
||||
action = gtk_radio_action_new (name,
|
||||
moo_edit_get_display_basename (doc),
|
||||
moo_edit_get_display_filename (doc),
|
||||
NULL, 0);
|
||||
action = g_object_new (MOO_TYPE_RADIO_ACTION ,
|
||||
"name", name,
|
||||
"label", moo_edit_get_display_basename (doc),
|
||||
"tooltip", moo_edit_get_display_filename (doc),
|
||||
NULL);
|
||||
g_object_set_data_full (doc, "moo-doc-list-action", action, g_object_unref);
|
||||
g_object_set_data (G_OBJECT (action), "moo-edit", doc);
|
||||
moo_action_set_no_accel (GTK_ACTION (action), TRUE);
|
||||
_moo_action_set_no_accel (action, TRUE);
|
||||
g_signal_connect (action, "toggled", G_CALLBACK (doc_list_action_toggled), window);
|
||||
gtk_action_group_add_action (moo_window_get_actions (MOO_WINDOW (window)),
|
||||
GTK_ACTION (action));
|
||||
group = moo_action_collection_get_group (moo_window_get_actions (MOO_WINDOW (window)), NULL);
|
||||
gtk_action_group_add_action (group, GTK_ACTION (action));
|
||||
g_free (name);
|
||||
}
|
||||
|
||||
|
|
|
@ -381,7 +381,7 @@ _moo_plugin_finish_load (void)
|
|||
while (waiting_list)
|
||||
{
|
||||
ModuleInfo *info = waiting_list->data;
|
||||
g_warning ("unknown module type '%s' in file %s",
|
||||
g_message ("unknown module type '%s' in file %s",
|
||||
info->loader, info->ini_file);
|
||||
module_info_free (info);
|
||||
waiting_list = g_slist_delete_link (waiting_list, waiting_list);
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#include "mooutils/mooconfig.h"
|
||||
#include "mooutils/moocommand.h"
|
||||
#include "mooutils/mooaccel.h"
|
||||
#include "mooutils/mooaction.h"
|
||||
#include "mooutils/mooaction-private.h"
|
||||
#include <string.h>
|
||||
|
||||
|
||||
|
@ -378,7 +378,7 @@ load_config_item (FileType type,
|
|||
case FILE_TOOLS:
|
||||
klass = g_type_class_peek (MOO_TYPE_EDIT_WINDOW);
|
||||
|
||||
moo_window_class_new_action_custom (klass, data->id,
|
||||
moo_window_class_new_action_custom (klass, data->id, NULL,
|
||||
create_tool_action, data,
|
||||
(GDestroyNotify) action_data_free);
|
||||
|
||||
|
@ -615,7 +615,7 @@ run_exe (MooToolAction *action,
|
|||
|
||||
return moo_cmd_view_run_command (MOO_CMD_VIEW (cmd_view), cmd_line,
|
||||
action->data->cmd->working_dir,
|
||||
moo_action_get_display_name (GTK_ACTION (action)));
|
||||
_moo_action_get_display_name (GTK_ACTION (action)));
|
||||
}
|
||||
|
||||
|
||||
|
@ -693,7 +693,7 @@ create_tool_action (MooWindow *window,
|
|||
"name", data->name,
|
||||
"label", data->label,
|
||||
NULL);
|
||||
moo_action_set_default_accel (GTK_ACTION (action), data->accel);
|
||||
_moo_action_set_default_accel (GTK_ACTION (action), data->accel);
|
||||
action->window = MOO_EDIT_WINDOW (window);
|
||||
action->data = data;
|
||||
|
||||
|
@ -722,7 +722,7 @@ create_edit_action (MooEdit *edit,
|
|||
"langs", data->langs,
|
||||
"flags", flags,
|
||||
NULL);
|
||||
moo_action_set_default_accel (GTK_ACTION (action), data->accel);
|
||||
_moo_action_set_default_accel (GTK_ACTION (action), data->accel);
|
||||
action->window = moo_edit_get_window (edit);
|
||||
action->data = data;
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ cmpl_plugin_init (CmplPlugin *plugin)
|
|||
g_return_val_if_fail (klass != NULL, FALSE);
|
||||
g_return_val_if_fail (editor != NULL, FALSE);
|
||||
|
||||
moo_window_class_new_action (klass, "CompleteWord",
|
||||
moo_window_class_new_action (klass, "CompleteWord", NULL,
|
||||
"display-name", _("Complete Word"),
|
||||
"label", _("Complete Word"),
|
||||
"tooltip", _("Complete Word"),
|
||||
|
|
|
@ -302,7 +302,7 @@ moo_file_selector_populate_popup (MooFileView *fileview,
|
|||
{
|
||||
GtkAction *action;
|
||||
|
||||
action = gtk_action_group_get_action (moo_file_view_get_actions (fileview), "NewFile");
|
||||
action = moo_action_collection_get_action (moo_file_view_get_actions (fileview), "NewFile");
|
||||
|
||||
if (action)
|
||||
gtk_action_set_sensitive (action, !selected || !selected->next);
|
||||
|
@ -498,6 +498,7 @@ moo_file_selector_constructor (GType type,
|
|||
MooFileView *fileview;
|
||||
GObject *object;
|
||||
guint merge_id;
|
||||
GtkActionGroup *group;
|
||||
|
||||
object = G_OBJECT_CLASS(_moo_file_selector_parent_class)->constructor (type, n_props, props);
|
||||
filesel = MOO_FILE_SELECTOR (object);
|
||||
|
@ -509,15 +510,14 @@ moo_file_selector_constructor (GType type,
|
|||
|
||||
g_idle_add ((GSourceFunc) file_selector_go_home, g_object_ref (filesel));
|
||||
|
||||
moo_action_group_add_action (moo_file_view_get_actions (MOO_FILE_VIEW (fileview)),
|
||||
"GoToCurrentDocDir",
|
||||
group = moo_action_collection_get_group (moo_file_view_get_actions (MOO_FILE_VIEW (fileview)), NULL);
|
||||
moo_action_group_add_action (group, "GoToCurrentDocDir",
|
||||
"stock-id", GTK_STOCK_JUMP_TO,
|
||||
"tooltip", _("Go to current document directory"),
|
||||
"closure-object", filesel,
|
||||
"closure-callback", goto_current_doc_dir,
|
||||
NULL);
|
||||
moo_action_group_add_action (moo_file_view_get_actions (MOO_FILE_VIEW (fileview)),
|
||||
"NewFile",
|
||||
moo_action_group_add_action (group, "NewFile",
|
||||
"label", _("New File..."),
|
||||
"tooltip", _("New File..."),
|
||||
"stock-id", GTK_STOCK_NEW,
|
||||
|
@ -1272,7 +1272,7 @@ file_selector_plugin_init (Plugin *plugin)
|
|||
g_return_val_if_fail (klass != NULL, FALSE);
|
||||
g_return_val_if_fail (editor != NULL, FALSE);
|
||||
|
||||
moo_window_class_new_action (klass, "ShowFileSelector",
|
||||
moo_window_class_new_action (klass, "ShowFileSelector", NULL,
|
||||
"display-name", _("Show File Selector"),
|
||||
"label", _("Show File Selector"),
|
||||
"tooltip", _("Show file selector"),
|
||||
|
|
|
@ -236,7 +236,7 @@ find_plugin_init (FindPlugin *plugin)
|
|||
g_return_val_if_fail (klass != NULL, FALSE);
|
||||
g_return_val_if_fail (editor != NULL, FALSE);
|
||||
|
||||
moo_window_class_new_action (klass, "FindInFiles",
|
||||
moo_window_class_new_action (klass, "FindInFiles", NULL,
|
||||
"display-name", _("Find In Files"),
|
||||
"label", _("Find In Files"),
|
||||
"tooltip", _("Find in files"),
|
||||
|
@ -245,7 +245,7 @@ find_plugin_init (FindPlugin *plugin)
|
|||
"closure-callback", find_in_files_cb,
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (klass, "FindFile",
|
||||
moo_window_class_new_action (klass, "FindFile", NULL,
|
||||
"display-name", _("Find File"),
|
||||
"label", _("Find File"),
|
||||
"tooltip", _("Find file"),
|
||||
|
|
|
@ -456,7 +456,7 @@ moo_bookmark_mgr_save (MooBookmarkMgr *mgr)
|
|||
struct _UserInfo {
|
||||
GObject *user;
|
||||
MooUIXML *xml;
|
||||
GtkActionGroup *actions;
|
||||
MooActionCollection *actions;
|
||||
char *path;
|
||||
guint user_id;
|
||||
guint merge_id;
|
||||
|
@ -465,7 +465,7 @@ struct _UserInfo {
|
|||
|
||||
static UserInfo*
|
||||
user_info_new (GObject *user,
|
||||
GtkActionGroup *actions,
|
||||
MooActionCollection *actions,
|
||||
MooUIXML *xml,
|
||||
const char *path,
|
||||
guint user_id)
|
||||
|
@ -473,7 +473,7 @@ user_info_new (GObject *user,
|
|||
UserInfo *info;
|
||||
|
||||
g_return_val_if_fail (G_IS_OBJECT (user), NULL);
|
||||
g_return_val_if_fail (GTK_IS_ACTION_GROUP (actions), NULL);
|
||||
g_return_val_if_fail (MOO_IS_ACTION_COLLECTION (actions), NULL);
|
||||
g_return_val_if_fail (MOO_IS_UI_XML (xml), NULL);
|
||||
g_return_val_if_fail (path, NULL);
|
||||
g_return_val_if_fail (user_id > 0, NULL);
|
||||
|
@ -526,6 +526,7 @@ make_menu (MooBookmarkMgr *mgr,
|
|||
GtkTreeModel *model = GTK_TREE_MODEL (mgr->priv->store);
|
||||
GtkTreeIter iter;
|
||||
GString *markup;
|
||||
GtkActionGroup *group;
|
||||
|
||||
if (!gtk_tree_model_get_iter_first (model, &iter))
|
||||
return;
|
||||
|
@ -533,6 +534,8 @@ make_menu (MooBookmarkMgr *mgr,
|
|||
info->merge_id = moo_ui_xml_new_merge_id (info->xml);
|
||||
markup = g_string_new (NULL);
|
||||
|
||||
group = moo_action_collection_get_group (info->actions, NULL);
|
||||
|
||||
do
|
||||
{
|
||||
MooBookmark *bookmark = NULL;
|
||||
|
@ -549,9 +552,8 @@ make_menu (MooBookmarkMgr *mgr,
|
|||
|
||||
action_id = g_strdup_printf ("MooBookmarkAction-%p", bookmark);
|
||||
|
||||
action = moo_action_group_add_action (info->actions, action_id,
|
||||
"label", bookmark->label ? bookmark->label :
|
||||
bookmark->display_path,
|
||||
action = moo_action_group_add_action (group, action_id,
|
||||
"label", bookmark->label ? bookmark->label : bookmark->display_path,
|
||||
"stock-id", bookmark->icon_stock_id,
|
||||
"tooltip", bookmark->display_path,
|
||||
"no-accel", TRUE,
|
||||
|
@ -584,7 +586,7 @@ destroy_menu (UserInfo *info)
|
|||
for (l = info->bm_actions; l != NULL; l = l->next)
|
||||
{
|
||||
GtkAction *action = l->data;
|
||||
gtk_action_group_remove_action (info->actions, action);
|
||||
moo_action_collection_remove_action (info->actions, action);
|
||||
g_object_unref (action);
|
||||
}
|
||||
|
||||
|
@ -628,7 +630,7 @@ mgr_update_menus (MooBookmarkMgr *mgr)
|
|||
void
|
||||
_moo_bookmark_mgr_add_user (MooBookmarkMgr *mgr,
|
||||
gpointer user,
|
||||
GtkActionGroup *actions,
|
||||
MooActionCollection *actions,
|
||||
MooUIXML *xml,
|
||||
const char *path)
|
||||
{
|
||||
|
@ -637,7 +639,7 @@ _moo_bookmark_mgr_add_user (MooBookmarkMgr *mgr,
|
|||
|
||||
g_return_if_fail (MOO_IS_BOOKMARK_MGR (mgr));
|
||||
g_return_if_fail (G_IS_OBJECT (user));
|
||||
g_return_if_fail (GTK_IS_ACTION_GROUP (actions));
|
||||
g_return_if_fail (MOO_IS_ACTION_COLLECTION (actions));
|
||||
g_return_if_fail (MOO_IS_UI_XML (xml));
|
||||
g_return_if_fail (path != NULL);
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@ GtkWidget *_moo_bookmark_mgr_get_editor(MooBookmarkMgr *mgr);
|
|||
|
||||
void _moo_bookmark_mgr_add_user (MooBookmarkMgr *mgr,
|
||||
gpointer user, /* GObject* */
|
||||
GtkActionGroup *actions,
|
||||
MooActionCollection *actions,
|
||||
MooUIXML *xml,
|
||||
const char *path);
|
||||
void _moo_bookmark_mgr_remove_user(MooBookmarkMgr *mgr,
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "moofileview/moofileview-private.h"
|
||||
#include "moofileview/moofile-private.h"
|
||||
#include "mooutils/mooprefs.h"
|
||||
#include "mooutils/mooaction.h"
|
||||
#if MOO_USE_XDGMIME
|
||||
#include "mooutils/xdgmime/xdgmime.h"
|
||||
#endif
|
||||
|
@ -32,17 +33,17 @@ typedef struct {
|
|||
} ToolsInfo;
|
||||
|
||||
typedef struct {
|
||||
GtkAction parent;
|
||||
MooAction parent;
|
||||
MooFileView *fileview;
|
||||
GSList *extensions;
|
||||
GSList *mimetypes;
|
||||
char *command;
|
||||
} ToolAction;
|
||||
|
||||
typedef GtkActionClass ToolActionClass;
|
||||
typedef MooActionClass ToolActionClass;
|
||||
|
||||
GType _moo_file_view_tool_action_get_type (void) G_GNUC_CONST;
|
||||
G_DEFINE_TYPE (ToolAction, _moo_file_view_tool_action, GTK_TYPE_ACTION)
|
||||
G_DEFINE_TYPE (ToolAction, _moo_file_view_tool_action, MOO_TYPE_ACTION)
|
||||
|
||||
|
||||
static void
|
||||
|
@ -109,7 +110,7 @@ static void
|
|||
_moo_file_view_tool_action_class_init (ToolActionClass *klass)
|
||||
{
|
||||
G_OBJECT_CLASS (klass)->finalize = moo_file_view_tool_action_finalize;
|
||||
klass->activate = moo_file_view_tool_action_activate;
|
||||
GTK_ACTION_CLASS (klass)->activate = moo_file_view_tool_action_activate;
|
||||
}
|
||||
|
||||
|
||||
|
@ -207,6 +208,7 @@ _moo_file_view_tools_load (MooFileView *fileview)
|
|||
MooMarkupDoc *doc;
|
||||
MooMarkupNode *root, *child;
|
||||
MooUIXML *xml;
|
||||
MooActionCollection *actions;
|
||||
GtkActionGroup *group;
|
||||
MooUINode *ph;
|
||||
GSList *l;
|
||||
|
@ -214,7 +216,8 @@ _moo_file_view_tools_load (MooFileView *fileview)
|
|||
g_return_if_fail (MOO_IS_FILE_VIEW (fileview));
|
||||
|
||||
xml = moo_file_view_get_ui_xml (fileview);
|
||||
group = moo_file_view_get_actions (fileview);
|
||||
actions = moo_file_view_get_actions (fileview);
|
||||
group = moo_action_collection_get_group (actions, NULL);
|
||||
remove_old_tools (fileview, xml, group);
|
||||
|
||||
doc = moo_prefs_get_markup ();
|
||||
|
|
|
@ -39,7 +39,9 @@
|
|||
#include "mooutils/moocmd.h"
|
||||
#include "mooutils/moostock.h"
|
||||
#include "mooutils/mooactionfactory.h"
|
||||
#include "mooutils/mooaction-private.h"
|
||||
#include "mooutils/moomarshals.h"
|
||||
#include "mooutils/mooi18n.h"
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
|
@ -135,7 +137,7 @@ struct _MooFileViewPrivate {
|
|||
gboolean sort_case_sensitive;
|
||||
gboolean completion_case_sensitive;
|
||||
|
||||
GtkActionGroup *actions;
|
||||
MooActionCollection *actions;
|
||||
MooUIXML *ui_xml;
|
||||
gboolean has_selection;
|
||||
|
||||
|
@ -1054,13 +1056,16 @@ static void
|
|||
init_actions (MooFileView *fileview)
|
||||
{
|
||||
GtkAction *action;
|
||||
GtkActionGroup *group;
|
||||
|
||||
fileview->priv->actions = gtk_action_group_new ("File Selector");
|
||||
fileview->priv->actions = moo_action_collection_new ("File Selector", _("File Selector"));
|
||||
fileview->priv->ui_xml = moo_ui_xml_new ();
|
||||
moo_ui_xml_add_ui_from_string (fileview->priv->ui_xml,
|
||||
MOO_FILE_VIEW_UI, -1);
|
||||
|
||||
moo_action_group_add_action (fileview->priv->actions, "GoUp",
|
||||
group = moo_action_collection_get_group (fileview->priv->actions, NULL);
|
||||
|
||||
moo_action_group_add_action (group, "GoUp",
|
||||
"label", "Parent Folder",
|
||||
"tooltip", "Parent Folder",
|
||||
"stock-id", GTK_STOCK_GO_UP,
|
||||
|
@ -1070,7 +1075,7 @@ init_actions (MooFileView *fileview)
|
|||
"closure-signal", "go-up",
|
||||
NULL);
|
||||
|
||||
action = moo_action_group_add_action (fileview->priv->actions, "GoBack",
|
||||
action = moo_action_group_add_action (group, "GoBack",
|
||||
"label", "Go Back",
|
||||
"tooltip", "Go Back",
|
||||
"stock-id", GTK_STOCK_GO_BACK,
|
||||
|
@ -1081,7 +1086,7 @@ init_actions (MooFileView *fileview)
|
|||
NULL);
|
||||
moo_bind_bool_property (action, "sensitive", fileview, "can-go-back", FALSE);
|
||||
|
||||
action = moo_action_group_add_action (fileview->priv->actions, "GoForward",
|
||||
action = moo_action_group_add_action (group, "GoForward",
|
||||
"label", "Go Forward",
|
||||
"tooltip", "Go Forward",
|
||||
"stock-id", GTK_STOCK_GO_FORWARD,
|
||||
|
@ -1092,7 +1097,7 @@ init_actions (MooFileView *fileview)
|
|||
NULL);
|
||||
moo_bind_bool_property (action, "sensitive", fileview, "can-go-forward", FALSE);
|
||||
|
||||
moo_action_group_add_action (fileview->priv->actions, "GoHome",
|
||||
moo_action_group_add_action (group, "GoHome",
|
||||
"label", "Home Folder",
|
||||
"tooltip", "Home Folder",
|
||||
"stock-id", GTK_STOCK_HOME,
|
||||
|
@ -1102,7 +1107,7 @@ init_actions (MooFileView *fileview)
|
|||
"closure-signal", "go-home",
|
||||
NULL);
|
||||
|
||||
moo_action_group_add_action (fileview->priv->actions, "NewFolder",
|
||||
moo_action_group_add_action (group, "NewFolder",
|
||||
"label", "New Folder...",
|
||||
"tooltip", "New Folder...",
|
||||
"stock-id", GTK_STOCK_DIRECTORY,
|
||||
|
@ -1110,7 +1115,7 @@ init_actions (MooFileView *fileview)
|
|||
"closure-callback", file_view_create_folder,
|
||||
NULL);
|
||||
|
||||
action = moo_action_group_add_action (fileview->priv->actions, "Delete",
|
||||
action = moo_action_group_add_action (group, "Delete",
|
||||
"label", "Delete...",
|
||||
"tooltip", "Delete...",
|
||||
"stock-id", GTK_STOCK_DELETE,
|
||||
|
@ -1121,30 +1126,30 @@ init_actions (MooFileView *fileview)
|
|||
NULL);
|
||||
moo_bind_bool_property (action, "sensitive", fileview, "has-selection", FALSE);
|
||||
|
||||
action = moo_action_group_add_action (fileview->priv->actions, "ShowHiddenFiles",
|
||||
"action-type::", GTK_TYPE_TOGGLE_ACTION,
|
||||
action = moo_action_group_add_action (group, "ShowHiddenFiles",
|
||||
"action-type::", MOO_TYPE_TOGGLE_ACTION,
|
||||
"label", "Show Hidden Files",
|
||||
"tooltip", "Show Hidden Files",
|
||||
"accel", "<alt><shift>H",
|
||||
"force-accel-label", TRUE,
|
||||
NULL);
|
||||
moo_sync_toggle_action (action, fileview, "show-hidden-files", FALSE);
|
||||
_moo_sync_toggle_action (action, fileview, "show-hidden-files", FALSE);
|
||||
|
||||
action = moo_action_group_add_action (fileview->priv->actions, "ShowParentFolder",
|
||||
"action-type::", GTK_TYPE_TOGGLE_ACTION,
|
||||
action = moo_action_group_add_action (group, "ShowParentFolder",
|
||||
"action-type::", MOO_TYPE_TOGGLE_ACTION,
|
||||
"label", "Show Parent Folder",
|
||||
"tooltip", "Show Parent Folder",
|
||||
NULL);
|
||||
moo_sync_toggle_action (action, fileview, "show-parent-folder", FALSE);
|
||||
_moo_sync_toggle_action (action, fileview, "show-parent-folder", FALSE);
|
||||
|
||||
action = moo_action_group_add_action (fileview->priv->actions, "CaseSensitiveSort",
|
||||
"action-type::", GTK_TYPE_TOGGLE_ACTION,
|
||||
action = moo_action_group_add_action (group, "CaseSensitiveSort",
|
||||
"action-type::", MOO_TYPE_TOGGLE_ACTION,
|
||||
"label", "Case Sensitive Sort",
|
||||
"tooltip", "Case Sensitive Sort",
|
||||
NULL);
|
||||
moo_sync_toggle_action (action, fileview, "sort-case-sensitive", FALSE);
|
||||
_moo_sync_toggle_action (action, fileview, "sort-case-sensitive", FALSE);
|
||||
|
||||
action = moo_action_group_add_action (fileview->priv->actions, "Properties",
|
||||
action = moo_action_group_add_action (group, "Properties",
|
||||
"label", "Properties",
|
||||
"tooltip", "Properties",
|
||||
"stock-id", GTK_STOCK_PROPERTIES,
|
||||
|
@ -1155,7 +1160,7 @@ init_actions (MooFileView *fileview)
|
|||
NULL);
|
||||
moo_bind_bool_property (action, "sensitive", fileview, "has-selection", FALSE);
|
||||
|
||||
moo_action_group_add_action (fileview->priv->actions, "BookmarksMenu",
|
||||
moo_action_group_add_action (group, "BookmarksMenu",
|
||||
"label", "Bookmarks",
|
||||
"tooltip", "Bookmarks",
|
||||
"stock-id", GTK_STOCK_ABOUT,
|
||||
|
@ -1164,7 +1169,7 @@ init_actions (MooFileView *fileview)
|
|||
"has-submenu", TRUE,
|
||||
NULL);
|
||||
|
||||
moo_action_group_add_action (fileview->priv->actions, "AddBookmark",
|
||||
moo_action_group_add_action (group, "AddBookmark",
|
||||
"label", "Add Bookmark",
|
||||
"tooltip", "Add Bookmark",
|
||||
"stock-id", GTK_STOCK_ADD,
|
||||
|
@ -1172,7 +1177,7 @@ init_actions (MooFileView *fileview)
|
|||
"closure-callback", add_bookmark,
|
||||
NULL);
|
||||
|
||||
moo_action_group_add_action (fileview->priv->actions, "EditBookmarks",
|
||||
moo_action_group_add_action (group, "EditBookmarks",
|
||||
"label", "Edit Bookmarks...",
|
||||
"tooltip", "Edit Bookmarks...",
|
||||
"stock-id", GTK_STOCK_EDIT,
|
||||
|
@ -1180,7 +1185,7 @@ init_actions (MooFileView *fileview)
|
|||
"closure-callback", edit_bookmarks,
|
||||
NULL);
|
||||
|
||||
action = moo_action_group_add_action (fileview->priv->actions, "Cut",
|
||||
action = moo_action_group_add_action (group, "Cut",
|
||||
"label", "Cut",
|
||||
"tooltip", "Cut",
|
||||
"stock-id", GTK_STOCK_CUT,
|
||||
|
@ -1191,7 +1196,7 @@ init_actions (MooFileView *fileview)
|
|||
NULL);
|
||||
moo_bind_bool_property (action, "sensitive", fileview, "has-selection", FALSE);
|
||||
|
||||
action = moo_action_group_add_action (fileview->priv->actions, "Copy",
|
||||
action = moo_action_group_add_action (group, "Copy",
|
||||
"label", "Copy",
|
||||
"tooltip", "Copy",
|
||||
"stock-id", GTK_STOCK_COPY,
|
||||
|
@ -1202,7 +1207,7 @@ init_actions (MooFileView *fileview)
|
|||
NULL);
|
||||
moo_bind_bool_property (action, "sensitive", fileview, "has-selection", FALSE);
|
||||
|
||||
action = moo_action_group_add_action (fileview->priv->actions, "Paste",
|
||||
action = moo_action_group_add_action (group, "Paste",
|
||||
"label", "Paste",
|
||||
"tooltip", "Paste",
|
||||
"stock-id", GTK_STOCK_PASTE,
|
||||
|
@ -1213,7 +1218,7 @@ init_actions (MooFileView *fileview)
|
|||
NULL);
|
||||
|
||||
#ifdef __WIN32__
|
||||
moo_action_group_add_action (fileview->priv->actions, "Reload",
|
||||
moo_action_group_add_action (group, "Reload",
|
||||
"label", "Reload",
|
||||
"tooltip", "Reload",
|
||||
"stock-id", GTK_STOCK_REFRESH,
|
||||
|
@ -1232,7 +1237,7 @@ moo_file_view_get_ui_xml (MooFileView *fileview)
|
|||
}
|
||||
|
||||
|
||||
GtkActionGroup*
|
||||
MooActionCollection *
|
||||
moo_file_view_get_actions (MooFileView *fileview)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_FILE_VIEW (fileview), NULL);
|
||||
|
|
|
@ -36,7 +36,7 @@ gboolean moo_file_view_chdir (MooFileView *fileview,
|
|||
GError **error);
|
||||
|
||||
MooUIXML *moo_file_view_get_ui_xml (MooFileView *fileview);
|
||||
GtkActionGroup *moo_file_view_get_actions (MooFileView *fileview);
|
||||
MooActionCollection *moo_file_view_get_actions (MooFileView *fileview);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
|
|
@ -40,8 +40,7 @@ class _OpenRecent(object):
|
|||
|
||||
def __call__(self, window):
|
||||
action = moo.utils.MenuAction("OpenRecentProject", _("Open Recent Project"))
|
||||
moo.utils.action_set_display_name(action, _("Open Recent Project"))
|
||||
moo.utils.action_set_no_accel(action, True)
|
||||
action.set_property('display-name', _("Open Recent Project"))
|
||||
action.set_mgr(self.mgr.recent_list.get_menu_mgr())
|
||||
moo.utils.bind_bool_property(action, "sensitive",
|
||||
self.mgr.recent_list, "empty",
|
||||
|
|
|
@ -121,7 +121,7 @@
|
|||
<property name="text" translatable="yes"></property>
|
||||
<property name="has_frame">True</property>
|
||||
<property name="invisible_char">*</property>
|
||||
<property name="activates_default">False</property>
|
||||
<property name="activates_default">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
|
@ -208,7 +208,7 @@
|
|||
<property name="text" translatable="yes"></property>
|
||||
<property name="has_frame">True</property>
|
||||
<property name="invisible_char">*</property>
|
||||
<property name="activates_default">False</property>
|
||||
<property name="activates_default">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
@ -228,7 +228,7 @@
|
|||
<property name="text" translatable="yes"></property>
|
||||
<property name="has_frame">True</property>
|
||||
<property name="invisible_char">*</property>
|
||||
<property name="activates_default">False</property>
|
||||
<property name="activates_default">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
@ -563,7 +563,7 @@
|
|||
<property name="text" translatable="yes"></property>
|
||||
<property name="has_frame">True</property>
|
||||
<property name="invisible_char">*</property>
|
||||
<property name="activates_default">False</property>
|
||||
<property name="activates_default">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
@ -583,7 +583,7 @@
|
|||
<property name="text" translatable="yes"></property>
|
||||
<property name="has_frame">True</property>
|
||||
<property name="invisible_char">*</property>
|
||||
<property name="activates_default">False</property>
|
||||
<property name="activates_default">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
@ -839,7 +839,7 @@
|
|||
<property name="text" translatable="yes"></property>
|
||||
<property name="has_frame">True</property>
|
||||
<property name="invisible_char">*</property>
|
||||
<property name="activates_default">False</property>
|
||||
<property name="activates_default">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
@ -859,7 +859,7 @@
|
|||
<property name="text" translatable="yes"></property>
|
||||
<property name="has_frame">True</property>
|
||||
<property name="invisible_char">*</property>
|
||||
<property name="activates_default">False</property>
|
||||
<property name="activates_default">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
|
|
@ -30,5 +30,5 @@
|
|||
(define-method get_actions
|
||||
(of-object "MooFileView")
|
||||
(c-name "moo_file_view_get_actions")
|
||||
(return-type "GtkActionGroup*")
|
||||
(return-type "MooActionCollection*")
|
||||
)
|
||||
|
|
|
@ -21,7 +21,7 @@ class ActionFactory(object):
|
|||
self.fake_props = {}
|
||||
|
||||
for key in kwargs.keys():
|
||||
if key in ["callback", "display_name", "accel", "no_accel"]:
|
||||
if key in ["callback"]:
|
||||
self.fake_props[key] = kwargs[key]
|
||||
elif kwargs[key] is not None or key not in ["stock_id"]:
|
||||
self.props[key] = kwargs[key]
|
||||
|
@ -29,10 +29,10 @@ class ActionFactory(object):
|
|||
def __call__(self, window):
|
||||
self.window = window
|
||||
if _gtk.check_version(2, 8, 0):
|
||||
action = _gtk.Action(self.id, None, None, None)
|
||||
action = Action(self.id)
|
||||
self.set_props(action)
|
||||
else:
|
||||
action = _gobject.new(_gtk.Action, name=self.id, **self.props)
|
||||
action = _gobject.new(Action, name=self.id, **self.props)
|
||||
self.set_fake_props(action)
|
||||
return action
|
||||
|
||||
|
@ -40,12 +40,6 @@ class ActionFactory(object):
|
|||
for key in self.fake_props.keys():
|
||||
if key == "callback":
|
||||
action.connect("activate", _activate, self.fake_props[key], self.window)
|
||||
elif key == "display_name":
|
||||
action_set_display_name(action, self.fake_props[key])
|
||||
elif key == "accel":
|
||||
action_set_default_accel(action, self.fake_props[key])
|
||||
elif key == "no_accel":
|
||||
action_set_no_accel(action, self.fake_props[key])
|
||||
else:
|
||||
raise ValueError("unknown property " + key)
|
||||
|
||||
|
@ -55,8 +49,8 @@ class ActionFactory(object):
|
|||
|
||||
|
||||
|
||||
def window_class_add_action(klass, action_id, **kwargs):
|
||||
def window_class_add_action(klass, action_id, group=None, **kwargs):
|
||||
if kwargs.has_key("factory"):
|
||||
_utils._window_class_add_action(klass, action_id, kwargs["factory"])
|
||||
_utils._window_class_add_action(klass, action_id, group, kwargs["factory"])
|
||||
else:
|
||||
_utils._window_class_add_action(klass, action_id, ActionFactory(action_id, **kwargs))
|
||||
_utils._window_class_add_action(klass, action_id, group, ActionFactory(action_id, **kwargs))
|
||||
|
|
|
@ -126,9 +126,44 @@
|
|||
)
|
||||
)
|
||||
|
||||
(define-object MenuAction
|
||||
(define-interface ActionBase
|
||||
(in-module "Moo")
|
||||
(c-name "MooActionBase")
|
||||
(gtype-id "MOO_TYPE_ACTION_BASE")
|
||||
(prerequisite "GtkAction")
|
||||
)
|
||||
|
||||
(define-object ActionCollection
|
||||
(in-module "Moo")
|
||||
(parent "GObject")
|
||||
(c-name "MooActionCollection")
|
||||
(gtype-id "MOO_TYPE_ACTION_COLLECTION")
|
||||
)
|
||||
|
||||
(define-object Action
|
||||
(in-module "Moo")
|
||||
(parent "GtkAction")
|
||||
(c-name "MooAction")
|
||||
(gtype-id "MOO_TYPE_ACTION")
|
||||
)
|
||||
|
||||
(define-object ToggleAction
|
||||
(in-module "Moo")
|
||||
(parent "GtkToggleAction")
|
||||
(c-name "MooToggleAction")
|
||||
(gtype-id "MOO_TYPE_TOGGLE_ACTION")
|
||||
)
|
||||
|
||||
(define-object RadioAction
|
||||
(in-module "Moo")
|
||||
(parent "GtkRadioAction")
|
||||
(c-name "MooRadioAction")
|
||||
(gtype-id "MOO_TYPE_RADIO_ACTION")
|
||||
)
|
||||
|
||||
(define-object MenuAction
|
||||
(in-module "Moo")
|
||||
(parent "MooAction")
|
||||
(c-name "MooMenuAction")
|
||||
(gtype-id "MOO_TYPE_MENU_ACTION")
|
||||
)
|
||||
|
@ -1447,7 +1482,7 @@
|
|||
(define-method get_actions
|
||||
(of-object "MooWindow")
|
||||
(c-name "moo_window_get_actions")
|
||||
(return-type "GtkActionGroup*")
|
||||
(return-type "MooActionCollection*")
|
||||
)
|
||||
|
||||
(define-method get_action
|
||||
|
@ -1530,7 +1565,7 @@
|
|||
(parameters
|
||||
'("MooUIWidgetType" "type")
|
||||
'("const-char*" "path")
|
||||
'("GtkActionGroup*" "actions")
|
||||
'("MooActionCollection*" "actions")
|
||||
'("GtkAccelGroup*" "accel_group")
|
||||
)
|
||||
)
|
||||
|
@ -2205,67 +2240,67 @@
|
|||
|
||||
;; From ./ggap/moo/mooutils/mooaction.h
|
||||
|
||||
(define-function sync_toggle_action
|
||||
(c-name "moo_sync_toggle_action")
|
||||
(return-type "none")
|
||||
(parameters
|
||||
'("GtkAction*" "action")
|
||||
'("GObject*" "master")
|
||||
'("const-char*" "prop")
|
||||
'("gboolean" "invert" (null-ok) (default "FALSE"))
|
||||
)
|
||||
)
|
||||
|
||||
(define-function action_set_display_name
|
||||
(c-name "moo_action_set_display_name")
|
||||
(return-type "none")
|
||||
(parameters
|
||||
'("GtkAction*" "action")
|
||||
'("const-char*" "name")
|
||||
)
|
||||
)
|
||||
|
||||
(define-function action_get_display_name
|
||||
(c-name "moo_action_get_display_name")
|
||||
(return-type "const-char*")
|
||||
(parameters
|
||||
'("GtkAction*" "action")
|
||||
)
|
||||
)
|
||||
|
||||
(define-function action_set_default_accel
|
||||
(c-name "moo_action_set_default_accel")
|
||||
(return-type "none")
|
||||
(parameters
|
||||
'("GtkAction*" "action")
|
||||
'("const-char*" "accel" (null-ok))
|
||||
)
|
||||
)
|
||||
|
||||
(define-function action_get_default_accel
|
||||
(c-name "moo_action_get_default_accel")
|
||||
(return-type "const-char*")
|
||||
(parameters
|
||||
'("GtkAction*" "action")
|
||||
)
|
||||
)
|
||||
|
||||
(define-function action_set_no_accel
|
||||
(c-name "moo_action_set_no_accel")
|
||||
(return-type "none")
|
||||
(parameters
|
||||
'("GtkAction*" "action")
|
||||
'("gboolean" "no_accel")
|
||||
)
|
||||
)
|
||||
|
||||
(define-function action_get_no_accel
|
||||
(c-name "moo_action_get_no_accel")
|
||||
(return-type "gboolean")
|
||||
(parameters
|
||||
'("GtkAction*" "action")
|
||||
)
|
||||
)
|
||||
;; (define-function sync_toggle_action
|
||||
;; (c-name "moo_sync_toggle_action")
|
||||
;; (return-type "none")
|
||||
;; (parameters
|
||||
;; '("GtkAction*" "action")
|
||||
;; '("GObject*" "master")
|
||||
;; '("const-char*" "prop")
|
||||
;; '("gboolean" "invert" (null-ok) (default "FALSE"))
|
||||
;; )
|
||||
;; )
|
||||
;;
|
||||
;; (define-function action_set_display_name
|
||||
;; (c-name "moo_action_set_display_name")
|
||||
;; (return-type "none")
|
||||
;; (parameters
|
||||
;; '("GtkAction*" "action")
|
||||
;; '("const-char*" "name")
|
||||
;; )
|
||||
;; )
|
||||
;;
|
||||
;; (define-function action_get_display_name
|
||||
;; (c-name "moo_action_get_display_name")
|
||||
;; (return-type "const-char*")
|
||||
;; (parameters
|
||||
;; '("GtkAction*" "action")
|
||||
;; )
|
||||
;; )
|
||||
;;
|
||||
;; (define-function action_set_default_accel
|
||||
;; (c-name "moo_action_set_default_accel")
|
||||
;; (return-type "none")
|
||||
;; (parameters
|
||||
;; '("GtkAction*" "action")
|
||||
;; '("const-char*" "accel" (null-ok))
|
||||
;; )
|
||||
;; )
|
||||
;;
|
||||
;; (define-function action_get_default_accel
|
||||
;; (c-name "moo_action_get_default_accel")
|
||||
;; (return-type "const-char*")
|
||||
;; (parameters
|
||||
;; '("GtkAction*" "action")
|
||||
;; )
|
||||
;; )
|
||||
;;
|
||||
;; (define-function action_set_no_accel
|
||||
;; (c-name "moo_action_set_no_accel")
|
||||
;; (return-type "none")
|
||||
;; (parameters
|
||||
;; '("GtkAction*" "action")
|
||||
;; '("gboolean" "no_accel")
|
||||
;; )
|
||||
;; )
|
||||
;;
|
||||
;; (define-function action_get_no_accel
|
||||
;; (c-name "moo_action_get_no_accel")
|
||||
;; (return-type "gboolean")
|
||||
;; (parameters
|
||||
;; '("GtkAction*" "action")
|
||||
;; )
|
||||
;; )
|
||||
|
||||
|
||||
;; From ../mooutils/mooprefs.h
|
||||
|
|
|
@ -22,6 +22,7 @@ headers
|
|||
#include "mooutils/moostock.h"
|
||||
#include "mooutils/moouixml.h"
|
||||
#include "mooutils/moomenuaction.h"
|
||||
#include "mooutils/mooactionbase.h"
|
||||
#include "mooutils/mooundo.h"
|
||||
#include "mooutils/mooi18n.h"
|
||||
#include "moofileview/moofileview.h"
|
||||
|
@ -51,6 +52,8 @@ import gtk.gdk.Color as PyGdkColor_Type
|
|||
import gtk.gdk.Pixbuf as PyGdkPixbuf_Type
|
||||
import gtk.ActionGroup as PyGtkActionGroup_Type
|
||||
import gtk.Action as PyGtkAction_Type
|
||||
import gtk.ToggleAction as PyGtkToggleAction_Type
|
||||
import gtk.RadioAction as PyGtkRadioAction_Type
|
||||
import gtk.AccelGroup as PyGtkAccelGroup_Type
|
||||
%%
|
||||
ignore-glob
|
||||
|
@ -114,19 +117,20 @@ destroy_func_n_args (PyObject *func_n_args)
|
|||
static PyObject *
|
||||
_wrap_moo_window_class_add_action (G_GNUC_UNUSED PyObject *self, PyObject *args)
|
||||
{
|
||||
PyObject *py_type, *py_id, *py_factory_func, *func_n_args;
|
||||
PyObject *py_type, *py_id, *py_group, *py_factory_func, *func_n_args;
|
||||
GType type;
|
||||
MooWindowClass *klass;
|
||||
int i, extra;
|
||||
|
||||
extra = PyTuple_GET_SIZE (args) - 3;
|
||||
extra = PyTuple_GET_SIZE (args) - 4;
|
||||
|
||||
if (extra < 0)
|
||||
return_TypeError ("at least three arguments required");
|
||||
|
||||
py_type = PyTuple_GET_ITEM (args, 0);
|
||||
py_id = PyTuple_GET_ITEM (args, 1);
|
||||
py_factory_func = PyTuple_GET_ITEM (args, 2);
|
||||
py_group = PyTuple_GET_ITEM (args, 2);
|
||||
py_factory_func = PyTuple_GET_ITEM (args, 3);
|
||||
|
||||
type = pyg_type_from_object (py_type);
|
||||
|
||||
|
@ -139,6 +143,9 @@ _wrap_moo_window_class_add_action (G_GNUC_UNUSED PyObject *self, PyObject *args)
|
|||
if (!PyString_Check (py_id))
|
||||
return_TypeError ("id must be a string");
|
||||
|
||||
if (py_group != Py_None && !PyString_Check (py_group))
|
||||
return_TypeError ("group must be a string or None");
|
||||
|
||||
if (!PyCallable_Check (py_factory_func))
|
||||
return_TypeError ("factory_func must be callable");
|
||||
|
||||
|
@ -153,11 +160,12 @@ _wrap_moo_window_class_add_action (G_GNUC_UNUSED PyObject *self, PyObject *args)
|
|||
for (i = 0; i < extra; ++i)
|
||||
{
|
||||
PyTuple_SET_ITEM (PyTuple_GET_ITEM (func_n_args, 1), i + 1,
|
||||
PyTuple_GET_ITEM (args, i + 3));
|
||||
Py_INCREF (PyTuple_GET_ITEM (args, i + 3));
|
||||
PyTuple_GET_ITEM (args, i + 4));
|
||||
Py_INCREF (PyTuple_GET_ITEM (args, i + 4));
|
||||
}
|
||||
|
||||
moo_window_class_new_action_custom (klass, PyString_AS_STRING (py_id),
|
||||
py_group == Py_None ? NULL : PyString_AS_STRING (py_group),
|
||||
(MooWindowActionFunc) py_action_factory_func,
|
||||
func_n_args, (GDestroyNotify) destroy_func_n_args);
|
||||
|
||||
|
|
|
@ -51,27 +51,27 @@ static void moo_term_window_class_init (MooTermWindowClass *klass)
|
|||
|
||||
moo_window_class_set_id (window_class, "Terminal", "Terminal");
|
||||
|
||||
moo_window_class_new_action (window_class, "Copy",
|
||||
"stock-display-name", GTK_STOCK_COPY,
|
||||
"stock-label", GTK_STOCK_COPY,
|
||||
"stock-tooltip", GTK_STOCK_COPY,
|
||||
moo_window_class_new_action (window_class, "Copy", NULL,
|
||||
"display-name", GTK_STOCK_COPY,
|
||||
"label", GTK_STOCK_COPY,
|
||||
"tooltip", GTK_STOCK_COPY,
|
||||
"stock-id", GTK_STOCK_COPY,
|
||||
"accel", "<alt>C",
|
||||
"closure-callback", copy_clipboard,
|
||||
"closure-proxy-func", moo_term_window_get_term,
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Paste",
|
||||
"stock-display-name", GTK_STOCK_PASTE,
|
||||
"stock-label", GTK_STOCK_PASTE,
|
||||
"stock-tooltip", GTK_STOCK_PASTE,
|
||||
moo_window_class_new_action (window_class, "Paste", NULL,
|
||||
"display-name", GTK_STOCK_PASTE,
|
||||
"label", GTK_STOCK_PASTE,
|
||||
"tooltip", GTK_STOCK_PASTE,
|
||||
"stock-id", GTK_STOCK_PASTE,
|
||||
"accel", "<alt>V",
|
||||
"closure-callback", paste_clipboard,
|
||||
"closure-proxy-func", moo_term_window_get_term,
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "SelectAll",
|
||||
moo_window_class_new_action (window_class, "SelectAll", NULL,
|
||||
"display-name", "Select All",
|
||||
"label", "Select _All",
|
||||
"tooltip", "Select all",
|
||||
|
|
|
@ -23,8 +23,9 @@ gtk_2_4_sources = \
|
|||
newgtk/gtkfontbutton.h
|
||||
|
||||
mooutils_include_headers = \
|
||||
mooaccelbutton.h \
|
||||
mooaction.h \
|
||||
mooactionbase.h \
|
||||
mooactioncollection.h \
|
||||
moobigpaned.h \
|
||||
mooclosure.h \
|
||||
moocmd.h \
|
||||
|
@ -63,10 +64,19 @@ mooutils_sources = \
|
|||
mooaccel.c \
|
||||
mooaccelbutton-glade.h \
|
||||
mooaccelbutton.c \
|
||||
mooaccelbutton.h \
|
||||
mooaccelprefs.h \
|
||||
mooaccelprefs.c \
|
||||
mooaccelprefs-glade.h \
|
||||
mooaction.c \
|
||||
mooaction-private.h \
|
||||
mooactionbase.c \
|
||||
mooactionbase-private.h \
|
||||
mooactioncollection.c \
|
||||
mooactionfactory.h \
|
||||
mooactionfactory.c \
|
||||
mooactiongroup.h \
|
||||
mooactiongroup.c \
|
||||
moobigpaned.c \
|
||||
mooclosure.c \
|
||||
moocmd.c \
|
||||
|
|
|
@ -86,7 +86,7 @@
|
|||
<widget class="GtkScrolledWindow" id="scrolledwindow">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
|
||||
<property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
|
||||
<property name="shadow_type">GTK_SHADOW_IN</property>
|
||||
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
||||
|
@ -355,81 +355,6 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="layout_style">GTK_BUTTONBOX_END</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="reset">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="response_id">-2</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkAlignment" id="alignment31">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xscale">0</property>
|
||||
<property name="yscale">0</property>
|
||||
<property name="top_padding">0</property>
|
||||
<property name="bottom_padding">0</property>
|
||||
<property name="left_padding">0</property>
|
||||
<property name="right_padding">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHBox" id="hbox12">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">2</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImage" id="image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-refresh</property>
|
||||
<property name="icon_size">4</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label67">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Set _Defaults</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="cancel">
|
||||
<property name="visible">True</property>
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* mooaction-private.h
|
||||
*
|
||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* See COPYING file that comes with this distribution.
|
||||
*/
|
||||
|
||||
#ifndef __MOO_ACTION_PRIVATE_H__
|
||||
#define __MOO_ACTION_PRIVATE_H__
|
||||
|
||||
#include <mooutils/mooaction.h>
|
||||
#include <mooutils/mooclosure.h>
|
||||
#include <gtk/gtkactiongroup.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
void _moo_action_set_closure (MooAction *action,
|
||||
MooClosure *closure);
|
||||
|
||||
typedef void (*MooToggleActionCallback) (gpointer data,
|
||||
gboolean active);
|
||||
void _moo_toggle_action_set_callback (MooToggleAction *action,
|
||||
MooToggleActionCallback callback,
|
||||
gpointer data,
|
||||
gboolean object);
|
||||
|
||||
void _moo_sync_toggle_action (GtkAction *action,
|
||||
gpointer master,
|
||||
const char *prop,
|
||||
gboolean invert);
|
||||
|
||||
/* defined in mooactionbase.c */
|
||||
gboolean _moo_action_get_dead (gpointer action);
|
||||
gboolean _moo_action_get_has_submenu (gpointer action);
|
||||
|
||||
const char *_moo_action_get_display_name (gpointer action);
|
||||
GtkActionGroup *_moo_action_get_group (gpointer action);
|
||||
|
||||
void _moo_action_set_no_accel (gpointer action,
|
||||
gboolean no_accel);
|
||||
gboolean _moo_action_get_no_accel (gpointer action);
|
||||
char *_moo_action_make_accel_path (gpointer action);
|
||||
void _moo_action_set_accel_path (gpointer action,
|
||||
const char *accel_path);
|
||||
const char *_moo_action_get_accel_path (gpointer action);
|
||||
const char *_moo_action_get_default_accel (gpointer action);
|
||||
void _moo_action_set_default_accel (gpointer action,
|
||||
const char *accel);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __MOO_ACTION_PRIVATE_H__ */
|
|
@ -11,270 +11,521 @@
|
|||
* See COPYING file that comes with this distribution.
|
||||
*/
|
||||
|
||||
#include "mooutils/mooaction.h"
|
||||
#include "mooutils/mooaction-private.h"
|
||||
#include "mooutils/mooactionbase-private.h"
|
||||
#include "mooutils/mooutils-gobject.h"
|
||||
#include "mooutils/mooaccel.h"
|
||||
#include <gtk/gtktoggleaction.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
static void
|
||||
set_bool (gpointer object,
|
||||
const char *key,
|
||||
gboolean value)
|
||||
{
|
||||
g_object_set_data (object, key, GINT_TO_POINTER (value));
|
||||
#define DEFINE_ACTION_TYPE(TypeName, type_name, TYPE_PARENT) \
|
||||
\
|
||||
static void type_name##_init (TypeName *self); \
|
||||
static void type_name##_class_init (TypeName##Class *klass); \
|
||||
static void type_name##_set_property (GObject *object, \
|
||||
guint property_id, \
|
||||
const GValue *value, \
|
||||
GParamSpec *pspec); \
|
||||
static void type_name##_get_property (GObject *object, \
|
||||
guint property_id, \
|
||||
GValue *value, \
|
||||
GParamSpec *pspec); \
|
||||
static gpointer type_name##_parent_class = NULL; \
|
||||
\
|
||||
static void \
|
||||
type_name##_class_intern_init (gpointer klass) \
|
||||
{ \
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass); \
|
||||
\
|
||||
object_class->set_property = type_name##_set_property; \
|
||||
object_class->get_property = type_name##_get_property; \
|
||||
_moo_action_base_init_class (object_class); \
|
||||
\
|
||||
type_name##_parent_class = g_type_class_peek_parent (klass); \
|
||||
type_name##_class_init ((TypeName##Class*) klass); \
|
||||
} \
|
||||
\
|
||||
GType \
|
||||
type_name##_get_type (void) \
|
||||
{ \
|
||||
static GType type; \
|
||||
\
|
||||
if (!type) \
|
||||
{ \
|
||||
static const GTypeInfo info = { \
|
||||
sizeof (TypeName##Class), \
|
||||
(GBaseInitFunc) NULL, \
|
||||
(GBaseFinalizeFunc) NULL, \
|
||||
(GClassInitFunc) type_name##_class_intern_init, \
|
||||
(GClassFinalizeFunc) NULL, \
|
||||
NULL, /* class_data */ \
|
||||
sizeof (TypeName), \
|
||||
0, /* n_preallocs */ \
|
||||
(GInstanceInitFunc) type_name##_init, \
|
||||
NULL /* value_table */ \
|
||||
}; \
|
||||
\
|
||||
static const GInterfaceInfo iface_info; \
|
||||
\
|
||||
type = g_type_register_static (TYPE_PARENT, \
|
||||
#TypeName, \
|
||||
&info, 0); \
|
||||
g_type_add_interface_static (type, \
|
||||
MOO_TYPE_ACTION_BASE, \
|
||||
&iface_info); \
|
||||
} \
|
||||
\
|
||||
return type; \
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
get_bool (gpointer object,
|
||||
const char *key)
|
||||
DEFINE_ACTION_TYPE (MooAction, moo_action, GTK_TYPE_ACTION)
|
||||
DEFINE_ACTION_TYPE (MooToggleAction, moo_toggle_action, GTK_TYPE_TOGGLE_ACTION)
|
||||
DEFINE_ACTION_TYPE (MooRadioAction, moo_radio_action, GTK_TYPE_RADIO_ACTION)
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* MooAction
|
||||
*/
|
||||
|
||||
struct _MooActionPrivate {
|
||||
MooClosure *closure;
|
||||
};
|
||||
|
||||
enum {
|
||||
MOO_ACTION_BASE_PROPS(ACTION),
|
||||
ACTION_PROP_CLOSURE,
|
||||
ACTION_PROP_CLOSURE_OBJECT,
|
||||
ACTION_PROP_CLOSURE_SIGNAL,
|
||||
ACTION_PROP_CLOSURE_CALLBACK,
|
||||
ACTION_PROP_CLOSURE_PROXY_FUNC
|
||||
};
|
||||
|
||||
|
||||
static void
|
||||
moo_action_init (MooAction *action)
|
||||
{
|
||||
return g_object_get_data (object, key) != NULL;
|
||||
action->priv = g_new0 (MooActionPrivate, 1);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
set_string (gpointer object,
|
||||
const char *key,
|
||||
const char *value)
|
||||
moo_action_dispose (GObject *object)
|
||||
{
|
||||
if (value)
|
||||
g_object_set_data_full (object, key, g_strdup (value), g_free);
|
||||
else
|
||||
g_object_set_data (object, key, NULL);
|
||||
}
|
||||
MooAction *action = MOO_ACTION (object);
|
||||
|
||||
|
||||
static const char *
|
||||
get_string (gpointer object,
|
||||
const char *key)
|
||||
{
|
||||
return g_object_get_data (object, key);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
moo_action_set_no_accel (GtkAction *action,
|
||||
gboolean no_accel)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_ACTION (action));
|
||||
set_bool (action, "moo-action-no-accel", no_accel);
|
||||
}
|
||||
|
||||
|
||||
gboolean
|
||||
moo_action_get_no_accel (GtkAction *action)
|
||||
{
|
||||
g_return_val_if_fail (GTK_IS_ACTION (action), FALSE);
|
||||
return get_bool (action, "moo-action-no-accel");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_action_set_force_accel_label (GtkAction *action,
|
||||
gboolean force)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_ACTION (action));
|
||||
set_bool (action, "moo-action-force-accel-label", force);
|
||||
}
|
||||
|
||||
|
||||
gboolean
|
||||
_moo_action_get_force_accel_label (GtkAction *action)
|
||||
{
|
||||
g_return_val_if_fail (GTK_IS_ACTION (action), FALSE);
|
||||
return get_bool (action, "moo-action-force-accel-label");
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
moo_action_get_default_accel (GtkAction *action)
|
||||
{
|
||||
const char *accel;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_ACTION (action), "");
|
||||
|
||||
accel = get_string (action, "moo-action-default-accel");
|
||||
return accel ? accel : "";
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
moo_action_set_default_accel (GtkAction *action,
|
||||
const char *accel)
|
||||
{
|
||||
char *norm;
|
||||
|
||||
g_return_if_fail (GTK_IS_ACTION (action));
|
||||
|
||||
if (!accel || !accel[0])
|
||||
if (action->priv->closure)
|
||||
{
|
||||
set_string (action, "moo-action-default-accel", accel);
|
||||
return;
|
||||
moo_closure_unref (action->priv->closure);
|
||||
action->priv->closure = NULL;
|
||||
}
|
||||
|
||||
norm = _moo_accel_normalize (accel);
|
||||
set_string (action, "moo-action-default-accel", norm);
|
||||
g_free (norm);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_action_set_accel_path (GtkAction *action,
|
||||
const char *accel_path)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_ACTION (action));
|
||||
set_string (action, "moo-action-accel-path", accel_path);
|
||||
|
||||
if (!moo_action_get_no_accel (action))
|
||||
gtk_action_set_accel_path (action, accel_path);
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
_moo_action_get_accel_path (GtkAction *action)
|
||||
{
|
||||
g_return_val_if_fail (GTK_IS_ACTION (action), NULL);
|
||||
return get_string (action, "moo-action-accel-path");
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
_moo_action_get_accel (GtkAction *action)
|
||||
{
|
||||
const char *path;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_ACTION (action), "");
|
||||
|
||||
path = _moo_action_get_accel_path (action);
|
||||
|
||||
if (path)
|
||||
return _moo_get_accel (path);
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
_moo_action_make_accel_path (const char *group_id,
|
||||
const char *action_id)
|
||||
{
|
||||
static GString *path = NULL;
|
||||
|
||||
g_return_val_if_fail (action_id != NULL && action_id[0] != 0, NULL);
|
||||
|
||||
if (!path)
|
||||
path = g_string_new (NULL);
|
||||
|
||||
if (group_id && group_id[0])
|
||||
g_string_printf (path, "<MooAction>/%s/%s", group_id, action_id);
|
||||
else
|
||||
g_string_printf (path, "<MooAction>/%s", action_id);
|
||||
|
||||
return path->str;
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
moo_action_get_display_name (GtkAction *action)
|
||||
{
|
||||
const char *name;
|
||||
g_return_val_if_fail (GTK_IS_ACTION (action), NULL);
|
||||
name = get_string (action, "moo-action-display-name");
|
||||
return name ? name : gtk_action_get_name (action);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
moo_action_set_display_name (GtkAction *action,
|
||||
const char *name)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_ACTION (action));
|
||||
set_string (action, "moo-action-display-name", name);
|
||||
}
|
||||
|
||||
|
||||
gboolean
|
||||
_moo_action_get_dead (GtkAction *action)
|
||||
{
|
||||
g_return_val_if_fail (GTK_IS_ACTION (action), TRUE);
|
||||
return get_bool (action, "moo-action-dead");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_action_set_dead (GtkAction *action,
|
||||
gboolean dead)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_ACTION (action));
|
||||
set_bool (action, "moo-action-dead", dead);
|
||||
}
|
||||
|
||||
|
||||
gboolean
|
||||
_moo_action_get_has_submenu (GtkAction *action)
|
||||
{
|
||||
g_return_val_if_fail (GTK_IS_ACTION (action), TRUE);
|
||||
return get_bool (action, "moo-action-has-submenu");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_action_set_has_submenu (GtkAction *action,
|
||||
gboolean has_submenu)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_ACTION (action));
|
||||
set_bool (action, "moo-action-has-submenu", has_submenu);
|
||||
G_OBJECT_CLASS (moo_action_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_activate (GtkAction *action)
|
||||
moo_action_activate (GtkAction *gtkaction)
|
||||
{
|
||||
MooClosure *closure = _moo_action_get_closure (action);
|
||||
MooAction *action = MOO_ACTION (gtkaction);
|
||||
|
||||
if (action->priv->closure)
|
||||
moo_closure_invoke (action->priv->closure);
|
||||
}
|
||||
|
||||
|
||||
static GObject *
|
||||
moo_action_constructor (GType type,
|
||||
guint n_props,
|
||||
GObjectConstructParam *props)
|
||||
{
|
||||
guint i;
|
||||
GObject *object;
|
||||
MooClosure *closure = NULL;
|
||||
gpointer closure_object = NULL;
|
||||
const char *closure_signal = NULL;
|
||||
GCallback closure_callback = NULL;
|
||||
GCallback closure_proxy_func = NULL;
|
||||
|
||||
for (i = 0; i < n_props; ++i)
|
||||
{
|
||||
const char *name = props[i].pspec->name;
|
||||
GValue *value = props[i].value;
|
||||
|
||||
if (!strcmp (name, "closure-object"))
|
||||
closure_object = g_value_get_object (value);
|
||||
else if (!strcmp (name, "closure-signal"))
|
||||
closure_signal = g_value_get_string (value);
|
||||
else if (!strcmp (name, "closure-callback"))
|
||||
closure_callback = g_value_get_pointer (value);
|
||||
else if (!strcmp (name, "closure-proxy-func"))
|
||||
closure_proxy_func = g_value_get_pointer (value);
|
||||
}
|
||||
|
||||
if (closure_callback || closure_signal)
|
||||
{
|
||||
if (closure_object)
|
||||
{
|
||||
closure = moo_closure_new_simple (closure_object, closure_signal,
|
||||
closure_callback, closure_proxy_func);
|
||||
moo_closure_ref_sink (closure);
|
||||
}
|
||||
else
|
||||
g_critical ("%s: closure data missing", G_STRLOC);
|
||||
}
|
||||
|
||||
object = G_OBJECT_CLASS(moo_action_parent_class)->constructor (type, n_props, props);
|
||||
|
||||
if (closure)
|
||||
moo_closure_invoke (closure);
|
||||
{
|
||||
_moo_action_set_closure (MOO_ACTION (object), closure);
|
||||
moo_closure_unref (closure);
|
||||
}
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_class_init (MooActionClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GtkActionClass *action_class = GTK_ACTION_CLASS (klass);
|
||||
|
||||
object_class->dispose = moo_action_dispose;
|
||||
object_class->constructor = moo_action_constructor;
|
||||
action_class->activate = moo_action_activate;
|
||||
|
||||
g_object_class_install_property (object_class, ACTION_PROP_CLOSURE,
|
||||
g_param_spec_boxed ("closure", "closure", "closure",
|
||||
MOO_TYPE_CLOSURE,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (object_class, ACTION_PROP_CLOSURE_OBJECT,
|
||||
g_param_spec_object ("closure-object", "closure-object", "closure-object",
|
||||
G_TYPE_OBJECT, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (object_class, ACTION_PROP_CLOSURE_SIGNAL,
|
||||
g_param_spec_string ("closure-signal", "closure-signal", "closure-signal",
|
||||
NULL, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (object_class, ACTION_PROP_CLOSURE_CALLBACK,
|
||||
g_param_spec_pointer ("closure-callback", "closure-callback", "closure-callback",
|
||||
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (object_class, ACTION_PROP_CLOSURE_PROXY_FUNC,
|
||||
g_param_spec_pointer ("closure-proxy-func", "closure-proxy-func", "closure-proxy-func",
|
||||
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_set_property (GObject *object,
|
||||
guint property_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MooAction *action = MOO_ACTION (object);
|
||||
|
||||
switch (property_id)
|
||||
{
|
||||
case ACTION_PROP_CLOSURE:
|
||||
_moo_action_set_closure (action, g_value_get_boxed (value));
|
||||
break;
|
||||
|
||||
case ACTION_PROP_CLOSURE_OBJECT:
|
||||
case ACTION_PROP_CLOSURE_SIGNAL:
|
||||
case ACTION_PROP_CLOSURE_CALLBACK:
|
||||
case ACTION_PROP_CLOSURE_PROXY_FUNC:
|
||||
/* these are handled in the constructor */
|
||||
break;
|
||||
|
||||
MOO_ACTION_BASE_SET_PROPERTY (ACTION);
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_get_property (GObject *object,
|
||||
guint property_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MooAction *action = MOO_ACTION (object);
|
||||
|
||||
switch (property_id)
|
||||
{
|
||||
case ACTION_PROP_CLOSURE:
|
||||
g_value_set_boxed (value, action->priv->closure);
|
||||
break;
|
||||
|
||||
MOO_ACTION_BASE_GET_PROPERTY (ACTION);
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_action_set_closure (GtkAction *action,
|
||||
_moo_action_set_closure (MooAction *action,
|
||||
MooClosure *closure)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_ACTION (action));
|
||||
g_return_if_fail (MOO_IS_ACTION (action));
|
||||
|
||||
if (closure == action->priv->closure)
|
||||
return;
|
||||
|
||||
if (action->priv->closure)
|
||||
moo_closure_unref (action->priv->closure);
|
||||
if (closure)
|
||||
{
|
||||
moo_closure_ref_sink (closure);
|
||||
g_object_set_data_full (G_OBJECT (action), "moo-action-closure",
|
||||
closure, (GDestroyNotify) moo_closure_unref);
|
||||
|
||||
if (!g_signal_handler_find (action, G_SIGNAL_MATCH_FUNC,
|
||||
0, 0, 0, moo_action_activate, NULL))
|
||||
g_signal_connect (action, "activate",
|
||||
G_CALLBACK (moo_action_activate),
|
||||
NULL);
|
||||
action->priv->closure = closure;
|
||||
g_object_notify (G_OBJECT (action), "closure");
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* MooToggleAction
|
||||
*/
|
||||
|
||||
struct _MooToggleActionPrivate {
|
||||
MooToggleActionCallback callback;
|
||||
MooObjectPtr *ptr;
|
||||
gpointer data;
|
||||
};
|
||||
|
||||
enum {
|
||||
MOO_ACTION_BASE_PROPS(TOGGLE_ACTION),
|
||||
TOGGLE_ACTION_PROP_TOGGLED_CALLBACK,
|
||||
TOGGLE_ACTION_PROP_TOGGLED_OBJECT,
|
||||
TOGGLE_ACTION_PROP_TOGGLED_DATA
|
||||
};
|
||||
|
||||
|
||||
static void
|
||||
moo_toggle_action_init (MooToggleAction *action)
|
||||
{
|
||||
action->priv = g_new0 (MooToggleActionPrivate, 1);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_toggle_action_dispose (GObject *object)
|
||||
{
|
||||
MooToggleAction *action = MOO_TOGGLE_ACTION (object);
|
||||
|
||||
if (action->priv->ptr)
|
||||
{
|
||||
moo_object_ptr_free (action->priv->ptr);
|
||||
action->priv->ptr = NULL;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (moo_toggle_action_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_toggle_action_toggled (GtkToggleAction *gtkaction)
|
||||
{
|
||||
MooToggleAction *action = MOO_TOGGLE_ACTION (gtkaction);
|
||||
|
||||
if (action->priv->callback)
|
||||
{
|
||||
if (MOO_OBJECT_PTR_GET (action->priv->ptr))
|
||||
{
|
||||
GObject *obj = MOO_OBJECT_PTR_GET (action->priv->ptr);
|
||||
g_object_ref (obj);
|
||||
action->priv->callback (obj, gtk_toggle_action_get_active (gtkaction));
|
||||
g_object_unref (obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_object_set_data (G_OBJECT (action), "moo-action-closure", NULL);
|
||||
action->priv->callback (action->priv->data, gtk_toggle_action_get_active (gtkaction));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
MooClosure *
|
||||
_moo_action_get_closure (GtkAction *action)
|
||||
static GObject *
|
||||
moo_toggle_action_constructor (GType type,
|
||||
guint n_props,
|
||||
GObjectConstructParam *props)
|
||||
{
|
||||
g_return_val_if_fail (GTK_IS_ACTION (action), NULL);
|
||||
return g_object_get_data (G_OBJECT (action), "moo-action-closure");
|
||||
guint i;
|
||||
GObject *object;
|
||||
MooToggleAction *action;
|
||||
MooToggleActionCallback toggled_callback = NULL;
|
||||
gpointer toggled_data = NULL;
|
||||
gpointer toggled_object = NULL;
|
||||
|
||||
for (i = 0; i < n_props; ++i)
|
||||
{
|
||||
const char *name = props[i].pspec->name;
|
||||
GValue *value = props[i].value;
|
||||
|
||||
if (!strcmp (name, "toggled-callback"))
|
||||
toggled_callback = g_value_get_pointer (value);
|
||||
else if (!strcmp (name, "toggled-data"))
|
||||
toggled_data = g_value_get_pointer (value);
|
||||
else if (!strcmp (name, "toggled-object"))
|
||||
toggled_object = g_value_get_object (value);
|
||||
}
|
||||
|
||||
object = G_OBJECT_CLASS(moo_toggle_action_parent_class)->constructor (type, n_props, props);
|
||||
action = MOO_TOGGLE_ACTION (object);
|
||||
|
||||
if (toggled_callback)
|
||||
{
|
||||
if (toggled_object)
|
||||
_moo_toggle_action_set_callback (action, toggled_callback, toggled_object, TRUE);
|
||||
else
|
||||
_moo_toggle_action_set_callback (action, toggled_callback, toggled_data, FALSE);
|
||||
}
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_toggle_action_set_callback (MooToggleAction *action,
|
||||
MooToggleActionCallback callback,
|
||||
gpointer data,
|
||||
gboolean object)
|
||||
{
|
||||
g_return_if_fail (MOO_IS_TOGGLE_ACTION (action));
|
||||
g_return_if_fail (!object || G_IS_OBJECT (data));
|
||||
|
||||
action->priv->callback = callback;
|
||||
if (action->priv->ptr)
|
||||
moo_object_ptr_free (action->priv->ptr);
|
||||
action->priv->ptr = NULL;
|
||||
action->priv->data = NULL;
|
||||
|
||||
if (callback)
|
||||
{
|
||||
if (object)
|
||||
action->priv->ptr = moo_object_ptr_new (data, NULL, NULL);
|
||||
else
|
||||
action->priv->data = data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_toggle_action_class_init (MooToggleActionClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GtkToggleActionClass *action_class = GTK_TOGGLE_ACTION_CLASS (klass);
|
||||
|
||||
object_class->dispose = moo_toggle_action_dispose;
|
||||
object_class->constructor = moo_toggle_action_constructor;
|
||||
action_class->toggled = moo_toggle_action_toggled;
|
||||
|
||||
g_object_class_install_property (object_class, TOGGLE_ACTION_PROP_TOGGLED_CALLBACK,
|
||||
g_param_spec_pointer ("toggled-callback", "toggled-callback", "toggled-callback",
|
||||
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (object_class, TOGGLE_ACTION_PROP_TOGGLED_OBJECT,
|
||||
g_param_spec_object ("toggled-object", "toggled-object", "toggled-object",
|
||||
G_TYPE_OBJECT, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (object_class, TOGGLE_ACTION_PROP_TOGGLED_DATA,
|
||||
g_param_spec_pointer ("toggled-data", "toggled-data", "toggled-data",
|
||||
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_toggle_action_set_property (GObject *object,
|
||||
guint property_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
switch (property_id)
|
||||
{
|
||||
case TOGGLE_ACTION_PROP_TOGGLED_CALLBACK:
|
||||
case TOGGLE_ACTION_PROP_TOGGLED_OBJECT:
|
||||
case TOGGLE_ACTION_PROP_TOGGLED_DATA:
|
||||
/* these are handled in the constructor */
|
||||
break;
|
||||
|
||||
MOO_ACTION_BASE_SET_PROPERTY (TOGGLE_ACTION);
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_toggle_action_get_property (GObject *object,
|
||||
guint property_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
switch (property_id)
|
||||
{
|
||||
MOO_ACTION_BASE_GET_PROPERTY (TOGGLE_ACTION);
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* MooRadioAction
|
||||
*/
|
||||
|
||||
enum {
|
||||
MOO_ACTION_BASE_PROPS(RADIO_ACTION)
|
||||
};
|
||||
|
||||
|
||||
static void
|
||||
moo_radio_action_init (G_GNUC_UNUSED MooRadioAction *action)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_radio_action_class_init (G_GNUC_UNUSED MooRadioActionClass *klass)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_radio_action_set_property (GObject *object,
|
||||
guint property_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
switch (property_id)
|
||||
{
|
||||
MOO_ACTION_BASE_SET_PROPERTY (RADIO_ACTION);
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_radio_action_get_property (GObject *object,
|
||||
guint property_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
switch (property_id)
|
||||
{
|
||||
MOO_ACTION_BASE_GET_PROPERTY (RADIO_ACTION);
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
/* moo_sync_toggle_action
|
||||
/* _moo_sync_toggle_action
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
|
@ -356,7 +607,7 @@ toggle_watch_destroy (MooObjectWatch *watch)
|
|||
|
||||
|
||||
void
|
||||
moo_sync_toggle_action (GtkAction *action,
|
||||
_moo_sync_toggle_action (GtkAction *action,
|
||||
gpointer master,
|
||||
const char *prop,
|
||||
gboolean invert)
|
||||
|
@ -388,9 +639,9 @@ prop_changed (ToggleWatch *watch)
|
|||
active = gtk_toggle_action_get_active (action);
|
||||
|
||||
if (!watch->invert)
|
||||
equal = ((value && active) || (!value && !active));
|
||||
equal = !value == !active;
|
||||
else
|
||||
equal = ((!value && active) || (value && !active));
|
||||
equal = !value != !active;
|
||||
|
||||
if (!equal)
|
||||
gtk_toggle_action_set_active (action, watch->invert ? !value : value);
|
||||
|
@ -411,9 +662,9 @@ action_toggled (ToggleWatch *watch)
|
|||
active = gtk_toggle_action_get_active (action);
|
||||
|
||||
if (!watch->invert)
|
||||
equal = ((value && active) || (!value && !active));
|
||||
equal = !value == !active;
|
||||
else
|
||||
equal = ((!value && active) || (value && !active));
|
||||
equal = !value != !active;
|
||||
|
||||
if (!equal)
|
||||
g_object_set (MOO_OBJECT_PTR_GET (watch->parent.source),
|
||||
|
|
|
@ -14,52 +14,75 @@
|
|||
#ifndef __MOO_ACTION_H__
|
||||
#define __MOO_ACTION_H__
|
||||
|
||||
#include <gtk/gtkactiongroup.h>
|
||||
#include <mooutils/mooclosure.h>
|
||||
#include <gtk/gtkradioaction.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
const char *moo_action_get_display_name (GtkAction *action);
|
||||
void moo_action_set_display_name (GtkAction *action,
|
||||
const char *name);
|
||||
#define MOO_TYPE_ACTION (moo_action_get_type ())
|
||||
#define MOO_ACTION(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MOO_TYPE_ACTION, MooAction))
|
||||
#define MOO_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOO_TYPE_ACTION, MooActionClass))
|
||||
#define MOO_IS_ACTION(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), MOO_TYPE_ACTION))
|
||||
#define MOO_IS_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MOO_TYPE_ACTION))
|
||||
#define MOO_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MOO_TYPE_ACTION, MooActionClass))
|
||||
|
||||
const char *moo_action_get_default_accel (GtkAction *action);
|
||||
void moo_action_set_default_accel (GtkAction *action,
|
||||
const char *accel);
|
||||
typedef struct _MooAction MooAction;
|
||||
typedef struct _MooActionPrivate MooActionPrivate;
|
||||
typedef struct _MooActionClass MooActionClass;
|
||||
|
||||
void moo_action_set_no_accel (GtkAction *action,
|
||||
gboolean no_accel);
|
||||
gboolean moo_action_get_no_accel (GtkAction *action);
|
||||
struct _MooAction {
|
||||
GtkAction base;
|
||||
MooActionPrivate *priv;
|
||||
};
|
||||
|
||||
void moo_sync_toggle_action (GtkAction *action,
|
||||
gpointer master,
|
||||
const char *prop,
|
||||
gboolean invert);
|
||||
struct _MooActionClass {
|
||||
GtkActionClass base_class;
|
||||
};
|
||||
|
||||
void _moo_action_set_force_accel_label (GtkAction *action,
|
||||
gboolean force);
|
||||
gboolean _moo_action_get_force_accel_label (GtkAction *action);
|
||||
|
||||
void _moo_action_set_accel_path (GtkAction *action,
|
||||
const char *accel_path);
|
||||
const char *_moo_action_get_accel_path (GtkAction *action);
|
||||
const char *_moo_action_get_accel (GtkAction *action);
|
||||
#define MOO_TYPE_TOGGLE_ACTION (moo_toggle_action_get_type ())
|
||||
#define MOO_TOGGLE_ACTION(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MOO_TYPE_TOGGLE_ACTION, MooToggleAction))
|
||||
#define MOO_TOGGLE_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOO_TYPE_TOGGLE_ACTION, MooToggleActionClass))
|
||||
#define MOO_IS_TOGGLE_ACTION(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), MOO_TYPE_TOGGLE_ACTION))
|
||||
#define MOO_IS_TOGGLE_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MOO_TYPE_TOGGLE_ACTION))
|
||||
#define MOO_TOGGLE_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MOO_TYPE_TOGGLE_ACTION, MooToggleActionClass))
|
||||
|
||||
const char *_moo_action_make_accel_path (const char *group_id,
|
||||
const char *action_id);
|
||||
typedef struct _MooToggleAction MooToggleAction;
|
||||
typedef struct _MooToggleActionPrivate MooToggleActionPrivate;
|
||||
typedef struct _MooToggleActionClass MooToggleActionClass;
|
||||
|
||||
gboolean _moo_action_get_dead (GtkAction *action);
|
||||
void _moo_action_set_dead (GtkAction *action,
|
||||
gboolean dead);
|
||||
struct _MooToggleAction {
|
||||
GtkToggleAction base;
|
||||
MooToggleActionPrivate *priv;
|
||||
};
|
||||
|
||||
gboolean _moo_action_get_has_submenu (GtkAction *action);
|
||||
void _moo_action_set_has_submenu (GtkAction *action,
|
||||
gboolean dead);
|
||||
struct _MooToggleActionClass {
|
||||
GtkToggleActionClass base_class;
|
||||
};
|
||||
|
||||
void _moo_action_set_closure (GtkAction *action,
|
||||
MooClosure *closure);
|
||||
MooClosure *_moo_action_get_closure (GtkAction *action);
|
||||
|
||||
#define MOO_TYPE_RADIO_ACTION (moo_radio_action_get_type ())
|
||||
#define MOO_RADIO_ACTION(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MOO_TYPE_RADIO_ACTION, MooRadioAction))
|
||||
#define MOO_RADIO_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOO_TYPE_RADIO_ACTION, MooRadioActionClass))
|
||||
#define MOO_IS_RADIO_ACTION(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), MOO_TYPE_RADIO_ACTION))
|
||||
#define MOO_IS_RADIO_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MOO_TYPE_RADIO_ACTION))
|
||||
#define MOO_RADIO_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MOO_TYPE_RADIO_ACTION, MooRadioActionClass))
|
||||
|
||||
typedef struct _MooRadioAction MooRadioAction;
|
||||
typedef struct _MooRadioActionClass MooRadioActionClass;
|
||||
|
||||
struct _MooRadioAction {
|
||||
GtkRadioAction base;
|
||||
};
|
||||
|
||||
struct _MooRadioActionClass {
|
||||
GtkRadioActionClass base_class;
|
||||
};
|
||||
|
||||
|
||||
GType moo_action_get_type (void) G_GNUC_CONST;
|
||||
GType moo_toggle_action_get_type (void) G_GNUC_CONST;
|
||||
GType moo_radio_action_get_type (void) G_GNUC_CONST;
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* mooactionbase-private.h
|
||||
*
|
||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* See COPYING file that comes with this distribution.
|
||||
*/
|
||||
|
||||
#ifndef __MOO_ACTION_BASE_PRIVATE_H__
|
||||
#define __MOO_ACTION_BASE_PRIVATE_H__
|
||||
|
||||
#include <mooutils/mooactionbase.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
#define MOO_ACTION_BASE_PROPS(prefix) \
|
||||
prefix##_PROP_0, \
|
||||
prefix##_PROP_DISPLAY_NAME, \
|
||||
prefix##_PROP_ACCEL, \
|
||||
prefix##_PROP_NO_ACCEL, \
|
||||
prefix##_PROP_FORCE_ACCEL_LABEL, \
|
||||
prefix##_PROP_DEAD, \
|
||||
prefix##_PROP_ACTIVE, \
|
||||
prefix##_PROP_HAS_SUBMENU, \
|
||||
/* these are overridden GtkAction properties */ \
|
||||
prefix##_PROP_LABEL, \
|
||||
prefix##_PROP_TOOLTIP
|
||||
|
||||
|
||||
#define MOO_ACTION_BASE_SET_GET_PROPERTY(prefix,func) \
|
||||
case prefix##_PROP_DISPLAY_NAME: \
|
||||
case prefix##_PROP_ACCEL: \
|
||||
case prefix##_PROP_NO_ACCEL: \
|
||||
case prefix##_PROP_FORCE_ACCEL_LABEL: \
|
||||
case prefix##_PROP_DEAD: \
|
||||
case prefix##_PROP_ACTIVE: \
|
||||
case prefix##_PROP_HAS_SUBMENU: \
|
||||
case prefix##_PROP_LABEL: \
|
||||
case prefix##_PROP_TOOLTIP: \
|
||||
func (object, property_id, value, pspec); \
|
||||
break
|
||||
|
||||
#define MOO_ACTION_BASE_SET_PROPERTY(prefix) MOO_ACTION_BASE_SET_GET_PROPERTY(prefix, _moo_action_base_set_property)
|
||||
#define MOO_ACTION_BASE_GET_PROPERTY(prefix) MOO_ACTION_BASE_SET_GET_PROPERTY(prefix, _moo_action_base_get_property)
|
||||
|
||||
|
||||
void _moo_action_base_init_class (GObjectClass *klass);
|
||||
void _moo_action_base_set_property (GObject *object,
|
||||
guint property_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec);
|
||||
void _moo_action_base_get_property (GObject *object,
|
||||
guint property_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __MOO_ACTION_BASE_PRIVATE_H__ */
|
|
@ -0,0 +1,516 @@
|
|||
/*
|
||||
* mooactionbase.c
|
||||
*
|
||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* See COPYING file that comes with this distribution.
|
||||
*/
|
||||
|
||||
#include "mooutils/mooactionbase-private.h"
|
||||
#include "mooutils/mooaction-private.h"
|
||||
#include "mooutils/mooactiongroup.h"
|
||||
#include <gtk/gtkaction.h>
|
||||
#include <gtk/gtkstock.h>
|
||||
#include <string.h>
|
||||
|
||||
enum {
|
||||
MOO_ACTION_BASE_PROPS(MOO_ACTION_BASE)
|
||||
};
|
||||
|
||||
|
||||
static void
|
||||
moo_action_base_class_init (gpointer g_iface)
|
||||
{
|
||||
g_object_interface_install_property (g_iface,
|
||||
g_param_spec_string ("display-name", "display-name", "display-name",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_interface_install_property (g_iface,
|
||||
g_param_spec_string ("accel", "accel", "accel",
|
||||
NULL,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_interface_install_property (g_iface,
|
||||
g_param_spec_boolean ("no-accel", "no-accel", "no-accel",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_interface_install_property (g_iface,
|
||||
g_param_spec_boolean ("force-accel-label", "force-accel-label", "force-accel-label",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_interface_install_property (g_iface,
|
||||
g_param_spec_boolean ("dead", "dead", "dead",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_interface_install_property (g_iface,
|
||||
g_param_spec_boolean ("active", "active", "active",
|
||||
TRUE,
|
||||
G_PARAM_WRITABLE));
|
||||
g_object_interface_install_property (g_iface,
|
||||
g_param_spec_boolean ("has-submenu", "has-submenu", "has-submenu",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_action_base_init_class (GObjectClass *klass)
|
||||
{
|
||||
g_object_class_install_property (klass, MOO_ACTION_BASE_PROP_DISPLAY_NAME,
|
||||
g_param_spec_string ("display-name", "display-name", "display-name",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (klass, MOO_ACTION_BASE_PROP_ACCEL,
|
||||
g_param_spec_string ("accel", "accel", "accel",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (klass, MOO_ACTION_BASE_PROP_NO_ACCEL,
|
||||
g_param_spec_boolean ("no-accel", "no-accel", "no-accel",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (klass, MOO_ACTION_BASE_PROP_FORCE_ACCEL_LABEL,
|
||||
g_param_spec_boolean ("force-accel-label", "force-accel-label", "force-accel-label",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (klass, MOO_ACTION_BASE_PROP_DEAD,
|
||||
g_param_spec_boolean ("dead", "dead", "dead",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (klass, MOO_ACTION_BASE_PROP_ACTIVE,
|
||||
g_param_spec_boolean ("active", "active", "active",
|
||||
TRUE,
|
||||
G_PARAM_WRITABLE));
|
||||
g_object_class_install_property (klass, MOO_ACTION_BASE_PROP_HAS_SUBMENU,
|
||||
g_param_spec_boolean ("has-submenu", "has-submenu", "has-submenu",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_override_property (klass,
|
||||
MOO_ACTION_BASE_PROP_LABEL,
|
||||
"label");
|
||||
g_object_class_override_property (klass,
|
||||
MOO_ACTION_BASE_PROP_TOOLTIP,
|
||||
"tooltip");
|
||||
}
|
||||
|
||||
|
||||
GType
|
||||
moo_action_base_get_type (void)
|
||||
{
|
||||
static GType type;
|
||||
|
||||
if (!type)
|
||||
{
|
||||
static const GTypeInfo info = {
|
||||
sizeof (MooActionBaseClass), /* class_size */
|
||||
NULL, /* base_init */
|
||||
NULL, /* base_finalize */
|
||||
(GClassInitFunc) moo_action_base_class_init, /* class_init */
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
0,
|
||||
0, /* n_preallocs */
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
type = g_type_register_static (G_TYPE_INTERFACE,
|
||||
"MooActionBase",
|
||||
&info, 0);
|
||||
g_type_interface_add_prerequisite (type, GTK_TYPE_ACTION);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
static char *
|
||||
strip_underscore (const char *label)
|
||||
{
|
||||
char *stripped, *underscore;
|
||||
|
||||
g_return_val_if_fail (label != NULL, NULL);
|
||||
|
||||
stripped = g_strdup (label);
|
||||
underscore = strchr (stripped, '_');
|
||||
|
||||
if (underscore)
|
||||
memmove (underscore, underscore + 1, strlen (underscore + 1) + 1);
|
||||
|
||||
return stripped;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
set_string (gpointer object,
|
||||
const char *id,
|
||||
const char *data)
|
||||
{
|
||||
g_object_set_data_full (object, id, g_strdup (data), g_free);
|
||||
}
|
||||
|
||||
static const char *
|
||||
get_string (gpointer object,
|
||||
const char *id)
|
||||
{
|
||||
return g_object_get_data (object, id);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
set_bool (gpointer object,
|
||||
const char *id,
|
||||
gboolean value)
|
||||
{
|
||||
g_object_set_data (object, id, GINT_TO_POINTER (value));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
get_bool (gpointer object,
|
||||
const char *id)
|
||||
{
|
||||
return g_object_get_data (object, id) != NULL;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_base_set_display_name (MooActionBase *ab,
|
||||
const char *name)
|
||||
{
|
||||
GtkStockItem stock_item;
|
||||
char *freeme = NULL;
|
||||
|
||||
g_return_if_fail (MOO_IS_ACTION_BASE (ab));
|
||||
g_return_if_fail (name != NULL);
|
||||
|
||||
if (gtk_stock_lookup (name, &stock_item))
|
||||
{
|
||||
freeme = strip_underscore (stock_item.label);
|
||||
name = freeme;
|
||||
}
|
||||
|
||||
set_string (ab, "moo-action-display-name", name);
|
||||
g_object_notify (G_OBJECT (ab), "display-name");
|
||||
|
||||
g_free (freeme);
|
||||
}
|
||||
|
||||
const char *
|
||||
_moo_action_get_display_name (gpointer action)
|
||||
{
|
||||
const char *display_name;
|
||||
|
||||
g_return_val_if_fail (MOO_IS_ACTION_BASE (action), NULL);
|
||||
|
||||
display_name = get_string (action, "moo-action-display-name");
|
||||
|
||||
if (!display_name)
|
||||
display_name = gtk_action_get_name (action);
|
||||
|
||||
return display_name;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_base_set_accel (MooActionBase *ab,
|
||||
const char *accel)
|
||||
{
|
||||
g_return_if_fail (MOO_IS_ACTION_BASE (ab));
|
||||
|
||||
if (accel && !accel[0])
|
||||
accel = NULL;
|
||||
|
||||
set_string (ab, "moo-action-accel", accel);
|
||||
g_object_notify (G_OBJECT (ab), "accel");
|
||||
}
|
||||
|
||||
static const char *
|
||||
moo_action_base_get_accel (MooActionBase *ab)
|
||||
{
|
||||
const char *accel;
|
||||
|
||||
g_return_val_if_fail (MOO_IS_ACTION_BASE (ab), "");
|
||||
|
||||
accel = get_string (ab, "moo-action-accel");
|
||||
|
||||
if (!accel)
|
||||
accel = "";
|
||||
|
||||
return accel;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_action_set_no_accel (gpointer action,
|
||||
gboolean no_accel)
|
||||
{
|
||||
g_return_if_fail (MOO_IS_ACTION_BASE (action));
|
||||
set_bool (action, "moo-action-no-accel", no_accel);
|
||||
g_object_notify (G_OBJECT (action), "no-accel");
|
||||
}
|
||||
|
||||
gboolean
|
||||
_moo_action_get_no_accel (gpointer action)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_ACTION_BASE (action), FALSE);
|
||||
return get_bool (action, "moo-action-no-accel");
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_base_set_force_accel_label (MooActionBase *ab,
|
||||
gboolean force)
|
||||
{
|
||||
g_return_if_fail (MOO_IS_ACTION_BASE (ab));
|
||||
set_bool (ab, "moo-action-force-accel-label", force);
|
||||
g_object_notify (G_OBJECT (ab), "force-accel-label");
|
||||
}
|
||||
|
||||
static gboolean
|
||||
moo_action_base_get_force_accel_label (MooActionBase *ab)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_ACTION_BASE (ab), FALSE);
|
||||
return get_bool (ab, "moo-action-force-accel-label");
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_base_set_dead (MooActionBase *ab, gboolean dead)
|
||||
{
|
||||
g_return_if_fail (MOO_IS_ACTION_BASE (ab));
|
||||
set_bool (ab, "moo-action-dead", dead);
|
||||
g_object_notify (G_OBJECT (ab), "dead");
|
||||
}
|
||||
|
||||
gboolean
|
||||
_moo_action_get_dead (gpointer action)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_ACTION_BASE (action), FALSE);
|
||||
return get_bool (action, "moo-action-dead");
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_base_set_active (MooActionBase *ab, gboolean active)
|
||||
{
|
||||
g_return_if_fail (MOO_IS_ACTION_BASE (ab));
|
||||
g_object_set (ab, "visible", active, "sensitive", active, NULL);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_base_set_has_submenu (MooActionBase *ab, gboolean has_submenu)
|
||||
{
|
||||
g_return_if_fail (MOO_IS_ACTION_BASE (ab));
|
||||
set_bool (ab, "moo-action-has-submenu", has_submenu);
|
||||
g_object_notify (G_OBJECT (ab), "has-submenu");
|
||||
}
|
||||
|
||||
gboolean
|
||||
_moo_action_get_has_submenu (gpointer action)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_ACTION_BASE (action), FALSE);
|
||||
return get_bool (action, "moo-action-has-submenu");
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_base_set_label (MooActionBase *ab,
|
||||
const char *label)
|
||||
{
|
||||
GtkStockItem stock_item;
|
||||
|
||||
g_return_if_fail (MOO_IS_ACTION_BASE (ab));
|
||||
|
||||
if (label && gtk_stock_lookup (label, &stock_item))
|
||||
label = stock_item.label;
|
||||
|
||||
g_object_set (G_OBJECT (ab), "GtkAction::label", label, NULL);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_base_set_tooltip (MooActionBase *ab,
|
||||
const char *tooltip)
|
||||
{
|
||||
GtkStockItem stock_item;
|
||||
char *freeme = NULL;
|
||||
|
||||
g_return_if_fail (MOO_IS_ACTION_BASE (ab));
|
||||
|
||||
if (tooltip && gtk_stock_lookup (tooltip, &stock_item))
|
||||
{
|
||||
freeme = strip_underscore (stock_item.label);
|
||||
tooltip = freeme;
|
||||
}
|
||||
|
||||
g_object_set (G_OBJECT (ab), "GtkAction::tooltip", tooltip, NULL);
|
||||
g_free (freeme);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_action_base_set_property (GObject *object,
|
||||
guint property_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MooActionBase *ab = MOO_ACTION_BASE (object);
|
||||
|
||||
switch (property_id)
|
||||
{
|
||||
case MOO_ACTION_BASE_PROP_DISPLAY_NAME:
|
||||
moo_action_base_set_display_name (ab, g_value_get_string (value));
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_ACCEL:
|
||||
moo_action_base_set_accel (ab, g_value_get_string (value));
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_NO_ACCEL:
|
||||
_moo_action_set_no_accel (ab, g_value_get_boolean (value));
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_FORCE_ACCEL_LABEL:
|
||||
moo_action_base_set_force_accel_label (ab, g_value_get_boolean (value));
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_DEAD:
|
||||
moo_action_base_set_dead (ab, g_value_get_boolean (value));
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_ACTIVE:
|
||||
moo_action_base_set_active (ab, g_value_get_boolean (value));
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_HAS_SUBMENU:
|
||||
moo_action_base_set_has_submenu (ab, g_value_get_boolean (value));
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_LABEL:
|
||||
moo_action_base_set_label (ab, g_value_get_string (value));
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_TOOLTIP:
|
||||
moo_action_base_set_tooltip (ab, g_value_get_string (value));
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_action_base_get_property (GObject *object,
|
||||
guint property_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MooActionBase *ab = MOO_ACTION_BASE (object);
|
||||
|
||||
switch (property_id)
|
||||
{
|
||||
case MOO_ACTION_BASE_PROP_DISPLAY_NAME:
|
||||
g_value_set_string (value, _moo_action_get_display_name (ab));
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_ACCEL:
|
||||
g_value_set_string (value, moo_action_base_get_accel (ab));
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_NO_ACCEL:
|
||||
g_value_set_boolean (value, _moo_action_get_no_accel (ab));
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_FORCE_ACCEL_LABEL:
|
||||
g_value_set_boolean (value, moo_action_base_get_force_accel_label (ab));
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_DEAD:
|
||||
g_value_set_boolean (value, _moo_action_get_dead (ab));
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_HAS_SUBMENU:
|
||||
g_value_set_boolean (value, _moo_action_get_has_submenu (ab));
|
||||
break;
|
||||
|
||||
case MOO_ACTION_BASE_PROP_LABEL:
|
||||
g_object_get_property (object, "GtkAction::label", value);
|
||||
break;
|
||||
case MOO_ACTION_BASE_PROP_TOOLTIP:
|
||||
g_object_get_property (object, "GtkAction::tooltip", value);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
GtkActionGroup *
|
||||
_moo_action_get_group (gpointer action)
|
||||
{
|
||||
GtkActionGroup *group = NULL;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_ACTION (action), NULL);
|
||||
|
||||
g_object_get (action, "action-group", &group, NULL);
|
||||
|
||||
if (group)
|
||||
g_object_unref (group);
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
_moo_action_make_accel_path (gpointer action)
|
||||
{
|
||||
GtkActionGroup *group = NULL;
|
||||
MooActionCollection *collection;
|
||||
const char *name, *group_name, *collection_name;
|
||||
|
||||
g_return_val_if_fail (MOO_IS_ACTION_BASE (action), NULL);
|
||||
|
||||
group = _moo_action_get_group (action);
|
||||
g_return_val_if_fail (MOO_IS_ACTION_GROUP (group), NULL);
|
||||
collection = _moo_action_group_get_collection (MOO_ACTION_GROUP (group));
|
||||
g_return_val_if_fail (MOO_IS_ACTION_COLLECTION (collection), NULL);
|
||||
|
||||
name = gtk_action_get_name (action);
|
||||
group_name = gtk_action_group_get_name (group);
|
||||
collection_name = moo_action_collection_get_name (collection);
|
||||
|
||||
g_return_val_if_fail (collection_name != NULL, NULL);
|
||||
g_return_val_if_fail (name != NULL && name[0] != 0, NULL);
|
||||
|
||||
if (group_name)
|
||||
return g_strdup_printf ("<MooAction>/%s/%s/%s", collection_name, group_name, name);
|
||||
else
|
||||
return g_strdup_printf ("<MooAction>/%s/%s", collection_name, name);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_action_set_accel_path (gpointer action,
|
||||
const char *accel_path)
|
||||
{
|
||||
g_return_if_fail (MOO_IS_ACTION_BASE (action));
|
||||
gtk_action_set_accel_path (action, accel_path);
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
_moo_action_get_accel_path (gpointer action)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_ACTION_BASE (action), NULL);
|
||||
return gtk_action_get_accel_path (action);
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
_moo_action_get_default_accel (gpointer action)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_ACTION_BASE (action), "");
|
||||
return moo_action_base_get_accel (action);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_action_set_default_accel (gpointer action,
|
||||
const char *accel)
|
||||
{
|
||||
g_return_if_fail (MOO_IS_ACTION_BASE (action));
|
||||
moo_action_base_set_accel (action, accel);
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* mooactionbase.h
|
||||
*
|
||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* See COPYING file that comes with this distribution.
|
||||
*/
|
||||
|
||||
#ifndef __MOO_ACTION_BASE_H__
|
||||
#define __MOO_ACTION_BASE_H__
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
#define MOO_TYPE_ACTION_BASE (moo_action_base_get_type ())
|
||||
#define MOO_ACTION_BASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MOO_TYPE_ACTION_BASE, MooActionBase))
|
||||
#define MOO_IS_ACTION_BASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MOO_TYPE_ACTION_BASE))
|
||||
#define MOO_ACTION_BASE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), MOO_TYPE_ACTION_BASE, MooActionBaseClass))
|
||||
|
||||
typedef struct _MooActionBase MooActionBase;
|
||||
typedef struct _MooActionBaseClass MooActionBaseClass;
|
||||
|
||||
struct _MooActionBaseClass {
|
||||
GTypeInterface parent;
|
||||
};
|
||||
|
||||
|
||||
GType moo_action_base_get_type (void) G_GNUC_CONST;
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __MOO_ACTION_BASE_H__ */
|
|
@ -0,0 +1,284 @@
|
|||
/*
|
||||
* mooactioncollection.c
|
||||
*
|
||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* See COPYING file that comes with this distribution.
|
||||
*/
|
||||
|
||||
#include "mooutils/mooactiongroup.h"
|
||||
#include "mooutils/mooactionbase.h"
|
||||
#include <string.h>
|
||||
|
||||
|
||||
struct _MooActionCollectionPrivate {
|
||||
MooActionGroup *default_group;
|
||||
GHashTable *groups; /* name -> MooActionGroup* */
|
||||
GSList *groups_list;
|
||||
char *name;
|
||||
};
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_NAME,
|
||||
PROP_DISPLAY_NAME
|
||||
};
|
||||
|
||||
|
||||
G_DEFINE_TYPE (MooActionCollection, moo_action_collection, G_TYPE_OBJECT)
|
||||
|
||||
|
||||
static void
|
||||
moo_action_collection_init (MooActionCollection *coll)
|
||||
{
|
||||
coll->priv = g_new0 (MooActionCollectionPrivate, 1);
|
||||
coll->priv->groups = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
|
||||
coll->priv->default_group = _moo_action_group_new (coll, NULL, NULL);
|
||||
coll->priv->groups_list = g_slist_prepend (NULL, coll->priv->default_group);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_collection_dispose (GObject *object)
|
||||
{
|
||||
MooActionCollection *coll = MOO_ACTION_COLLECTION (object);
|
||||
|
||||
if (coll->priv)
|
||||
{
|
||||
g_object_unref (coll->priv->default_group);
|
||||
g_hash_table_destroy (coll->priv->groups);
|
||||
g_slist_free (coll->priv->groups_list);
|
||||
g_free (coll->priv);
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (moo_action_collection_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_collection_set_property (GObject *object,
|
||||
guint property_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MooActionCollection *coll = MOO_ACTION_COLLECTION (object);
|
||||
char *tmp;
|
||||
|
||||
switch (property_id)
|
||||
{
|
||||
case PROP_NAME:
|
||||
tmp = coll->priv->name;
|
||||
coll->priv->name = g_strdup (g_value_get_string (value));
|
||||
g_free (tmp);
|
||||
break;
|
||||
case PROP_DISPLAY_NAME:
|
||||
moo_action_collection_set_display_name (coll, g_value_get_string (value));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_collection_get_property (GObject *object,
|
||||
guint property_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MooActionCollection *coll = MOO_ACTION_COLLECTION (object);
|
||||
|
||||
switch (property_id)
|
||||
{
|
||||
case PROP_NAME:
|
||||
g_value_set_string (value, moo_action_collection_get_name (coll));
|
||||
break;
|
||||
case PROP_DISPLAY_NAME:
|
||||
g_value_set_string (value, moo_action_collection_get_display_name (coll));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_collection_class_init (MooActionCollectionClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->dispose = moo_action_collection_dispose;
|
||||
object_class->set_property = moo_action_collection_set_property;
|
||||
object_class->get_property = moo_action_collection_get_property;
|
||||
|
||||
g_object_class_install_property (object_class, PROP_NAME,
|
||||
g_param_spec_string ("name", "name", "name",
|
||||
NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_DISPLAY_NAME,
|
||||
g_param_spec_string ("display-name", "display-name", "display-name",
|
||||
NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
|
||||
}
|
||||
|
||||
|
||||
MooActionCollection *
|
||||
moo_action_collection_new (const char *name,
|
||||
const char *display_name)
|
||||
{
|
||||
return g_object_new (MOO_TYPE_ACTION_COLLECTION,
|
||||
"name", name,
|
||||
"display-name", display_name,
|
||||
NULL);
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
moo_action_collection_get_name (MooActionCollection *coll)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_ACTION_COLLECTION (coll), NULL);
|
||||
return coll->priv->name;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
moo_action_collection_set_display_name (MooActionCollection *coll,
|
||||
const char *name)
|
||||
{
|
||||
g_return_if_fail (MOO_IS_ACTION_COLLECTION (coll));
|
||||
_moo_action_group_set_display_name (coll->priv->default_group, name);
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
moo_action_collection_get_display_name (MooActionCollection *coll)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_ACTION_COLLECTION (coll), NULL);
|
||||
return _moo_action_group_get_display_name (coll->priv->default_group);
|
||||
}
|
||||
|
||||
|
||||
static GtkActionGroup *
|
||||
get_group (MooActionCollection *coll,
|
||||
const char *name)
|
||||
{
|
||||
if (name)
|
||||
return g_hash_table_lookup (coll->priv->groups, name);
|
||||
else
|
||||
return GTK_ACTION_GROUP (coll->priv->default_group);
|
||||
}
|
||||
|
||||
|
||||
GtkActionGroup *
|
||||
moo_action_collection_add_group (MooActionCollection *coll,
|
||||
const char *name,
|
||||
const char *display_name)
|
||||
{
|
||||
MooActionGroup *group;
|
||||
|
||||
g_return_val_if_fail (MOO_IS_ACTION_COLLECTION (coll), NULL);
|
||||
g_return_val_if_fail (name != NULL, NULL);
|
||||
g_return_val_if_fail (get_group (coll, name) == NULL, NULL);
|
||||
|
||||
group = _moo_action_group_new (coll, name, display_name);
|
||||
g_hash_table_insert (coll->priv->groups, g_strdup (name), group);
|
||||
coll->priv->groups_list = g_slist_prepend (coll->priv->groups_list, group);
|
||||
|
||||
return GTK_ACTION_GROUP (group);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
moo_action_collection_remove_group (MooActionCollection *coll,
|
||||
GtkActionGroup *group)
|
||||
{
|
||||
const char *name;
|
||||
|
||||
g_return_if_fail (MOO_IS_ACTION_COLLECTION (coll));
|
||||
g_return_if_fail (MOO_IS_ACTION_GROUP (group));
|
||||
|
||||
name = gtk_action_group_get_name (group);
|
||||
g_return_if_fail (name != NULL);
|
||||
g_return_if_fail (group == get_group (coll, name));
|
||||
|
||||
_moo_action_group_set_collection (MOO_ACTION_GROUP (group), NULL);
|
||||
g_hash_table_remove (coll->priv->groups, name);
|
||||
coll->priv->groups_list = g_slist_remove (coll->priv->groups_list, group);
|
||||
}
|
||||
|
||||
|
||||
GtkActionGroup *
|
||||
moo_action_collection_get_group (MooActionCollection *coll,
|
||||
const char *name)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_ACTION_COLLECTION (coll), NULL);
|
||||
return get_group (coll, name);
|
||||
}
|
||||
|
||||
|
||||
const GSList *
|
||||
moo_action_collection_get_groups (MooActionCollection *coll)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_ACTION_COLLECTION (coll), NULL);
|
||||
return coll->priv->groups_list;
|
||||
}
|
||||
|
||||
|
||||
GtkAction *
|
||||
moo_action_collection_get_action (MooActionCollection *coll,
|
||||
const char *name)
|
||||
{
|
||||
GSList *l;
|
||||
|
||||
g_return_val_if_fail (MOO_IS_ACTION_COLLECTION (coll), NULL);
|
||||
g_return_val_if_fail (name != NULL, NULL);
|
||||
|
||||
for (l = coll->priv->groups_list; l != NULL; l = l->next)
|
||||
{
|
||||
GtkActionGroup *group = l->data;
|
||||
GtkAction *action = gtk_action_group_get_action (group, name);
|
||||
if (name)
|
||||
return action;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
moo_action_collection_remove_action (MooActionCollection *coll,
|
||||
GtkAction *action)
|
||||
{
|
||||
GtkActionGroup *group = NULL;
|
||||
|
||||
g_return_if_fail (MOO_IS_ACTION_COLLECTION (coll));
|
||||
g_return_if_fail (GTK_IS_ACTION (action));
|
||||
|
||||
g_object_get (action, "action-group", &group, NULL);
|
||||
g_return_if_fail (group != NULL);
|
||||
g_return_if_fail (g_slist_find (coll->priv->groups_list, group) != NULL);
|
||||
|
||||
gtk_action_group_remove_action (group, action);
|
||||
}
|
||||
|
||||
|
||||
GList *
|
||||
moo_action_collection_list_actions (MooActionCollection *coll)
|
||||
{
|
||||
GList *list = NULL;
|
||||
GSList *l;
|
||||
|
||||
g_return_val_if_fail (MOO_IS_ACTION_COLLECTION (coll), NULL);
|
||||
|
||||
for (l = coll->priv->groups_list; l != NULL; l = l->next)
|
||||
{
|
||||
GtkActionGroup *group = l->data;
|
||||
list = g_list_concat (list, gtk_action_group_list_actions (group));
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* mooactioncollection.h
|
||||
*
|
||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* See COPYING file that comes with this distribution.
|
||||
*/
|
||||
|
||||
#ifndef __MOO_ACTION_COLLECTION_H__
|
||||
#define __MOO_ACTION_COLLECTION_H__
|
||||
|
||||
#include <gtk/gtkactiongroup.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
#define MOO_TYPE_ACTION_COLLECTION (moo_action_collection_get_type ())
|
||||
#define MOO_ACTION_COLLECTION(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MOO_TYPE_ACTION_COLLECTION, MooActionCollection))
|
||||
#define MOO_ACTION_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOO_TYPE_ACTION_COLLECTION, MooActionCollectionClass))
|
||||
#define MOO_IS_ACTION_COLLECTION(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), MOO_TYPE_ACTION_COLLECTION))
|
||||
#define MOO_IS_ACTION_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MOO_TYPE_ACTION_COLLECTION))
|
||||
#define MOO_ACTION_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MOO_TYPE_ACTION_COLLECTION, MooActionCollectionClass))
|
||||
|
||||
typedef struct _MooActionCollection MooActionCollection;
|
||||
typedef struct _MooActionCollectionPrivate MooActionCollectionPrivate;
|
||||
typedef struct _MooActionCollectionClass MooActionCollectionClass;
|
||||
|
||||
struct _MooActionCollection {
|
||||
GObject base;
|
||||
MooActionCollectionPrivate *priv;
|
||||
};
|
||||
|
||||
struct _MooActionCollectionClass {
|
||||
GObjectClass base_class;
|
||||
};
|
||||
|
||||
|
||||
GType moo_action_collection_get_type (void) G_GNUC_CONST;
|
||||
|
||||
MooActionCollection *moo_action_collection_new (const char *name,
|
||||
const char *display_name);
|
||||
|
||||
const char *moo_action_collection_get_name (MooActionCollection *coll);
|
||||
|
||||
void moo_action_collection_set_display_name (MooActionCollection *coll,
|
||||
const char *name);
|
||||
const char *moo_action_collection_get_display_name (MooActionCollection *coll);
|
||||
|
||||
GtkActionGroup *moo_action_collection_add_group (MooActionCollection *coll,
|
||||
const char *name,
|
||||
const char *display_name);
|
||||
GtkActionGroup *moo_action_collection_get_group (MooActionCollection *coll,
|
||||
const char *name);
|
||||
void moo_action_collection_remove_group (MooActionCollection *coll,
|
||||
GtkActionGroup *group);
|
||||
const GSList *moo_action_collection_get_groups (MooActionCollection *coll);
|
||||
|
||||
GtkAction *moo_action_collection_get_action (MooActionCollection *coll,
|
||||
const char *name);
|
||||
void moo_action_collection_remove_action (MooActionCollection *coll,
|
||||
GtkAction *action);
|
||||
GList *moo_action_collection_list_actions (MooActionCollection *coll);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __MOO_ACTION_COLLECTION_H__ */
|
|
@ -12,11 +12,9 @@
|
|||
*/
|
||||
|
||||
#include "mooutils/mooactionfactory.h"
|
||||
#include "mooutils/mooaction.h"
|
||||
#include "mooutils/mooclosure.h"
|
||||
#include "mooutils/mooutils-gobject.h"
|
||||
#include "mooutils/mooutils-misc.h"
|
||||
#include <gtk/gtktoggleaction.h>
|
||||
#include "mooutils/mooaction.h"
|
||||
#include "mooutils/mooactionbase.h"
|
||||
#include <gobject/gvaluecollector.h>
|
||||
#include <string.h>
|
||||
|
||||
|
@ -24,110 +22,78 @@
|
|||
G_DEFINE_TYPE(MooActionFactory, moo_action_factory, G_TYPE_OBJECT)
|
||||
|
||||
|
||||
enum {
|
||||
PROP_DISPLAY_NAME,
|
||||
PROP_STOCK_LABEL,
|
||||
PROP_STOCK_DISPLAY_NAME,
|
||||
PROP_STOCK_TOOLTIP,
|
||||
PROP_ACCEL,
|
||||
PROP_NO_ACCEL,
|
||||
PROP_FORCE_ACCEL_LABEL,
|
||||
PROP_DEAD,
|
||||
PROP_HAS_SUBMENU,
|
||||
PROP_CLOSURE,
|
||||
PROP_CLOSURE_OBJECT,
|
||||
PROP_CLOSURE_SIGNAL,
|
||||
PROP_CLOSURE_CALLBACK,
|
||||
PROP_CLOSURE_PROXY_FUNC,
|
||||
PROP_TOGGLED_CALLBACK,
|
||||
PROP_TOGGLED_OBJECT,
|
||||
PROP_TOGGLED_DATA,
|
||||
PROP_LAST
|
||||
};
|
||||
|
||||
static GParamSpec *pspecs[PROP_LAST];
|
||||
|
||||
|
||||
static void
|
||||
moo_action_factory_finalize (GObject *object)
|
||||
moo_action_factory_dispose (GObject *object)
|
||||
{
|
||||
MooActionFactory *factory = MOO_ACTION_FACTORY (object);
|
||||
|
||||
if (factory->real_props)
|
||||
moo_param_array_free (factory->real_props, factory->n_real_props);
|
||||
if (factory->fake_props)
|
||||
moo_param_array_free (factory->fake_props, factory->n_fake_props);
|
||||
if (factory->props)
|
||||
{
|
||||
moo_param_array_free (factory->props, factory->n_props);
|
||||
factory->props = NULL;
|
||||
factory->n_props = 0;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS(moo_action_factory_parent_class)->finalize (object);
|
||||
G_OBJECT_CLASS(moo_action_factory_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_factory_class_init (MooActionFactoryClass *klass)
|
||||
{
|
||||
G_OBJECT_CLASS(klass)->finalize = moo_action_factory_finalize;
|
||||
G_OBJECT_CLASS(klass)->dispose = moo_action_factory_dispose;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_factory_init (MooActionFactory *factory)
|
||||
{
|
||||
factory->action_type = GTK_TYPE_ACTION;
|
||||
factory->action_type = MOO_TYPE_ACTION;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
action_init_props (void)
|
||||
static GtkAction *
|
||||
moo_action_new_valist (GType action_type,
|
||||
const char *name,
|
||||
const char *first_prop_name,
|
||||
va_list var_args)
|
||||
{
|
||||
if (pspecs[0])
|
||||
return;
|
||||
MooActionFactory *factory;
|
||||
GtkAction *action;
|
||||
|
||||
pspecs[PROP_DISPLAY_NAME] = g_param_spec_string ("display-name", "display-name", "display-name", NULL, G_PARAM_READWRITE);
|
||||
pspecs[PROP_STOCK_LABEL] = g_param_spec_string ("stock-label", "stock-label", "stock-label", NULL, G_PARAM_READWRITE);
|
||||
pspecs[PROP_STOCK_DISPLAY_NAME] = g_param_spec_string ("stock-display-name", "stock-display-name", "stock-display-name", NULL, G_PARAM_READWRITE);
|
||||
pspecs[PROP_STOCK_TOOLTIP] = g_param_spec_string ("stock-tooltip", "stock-tooltip", "stock-tooltip", NULL, G_PARAM_READWRITE);
|
||||
g_return_val_if_fail (g_type_is_a (action_type, MOO_TYPE_ACTION_BASE), NULL);
|
||||
|
||||
pspecs[PROP_ACCEL] = g_param_spec_string ("accel", "accel", "accel", NULL, G_PARAM_READWRITE);
|
||||
pspecs[PROP_NO_ACCEL] = g_param_spec_boolean ("no-accel", "no-accel", "no-accel", FALSE, G_PARAM_READWRITE);
|
||||
pspecs[PROP_FORCE_ACCEL_LABEL] = g_param_spec_boolean ("force-accel-label", "force-accel-label", "force-accel-label", FALSE, G_PARAM_READWRITE);
|
||||
pspecs[PROP_DEAD] = g_param_spec_boolean ("dead", "dead", "dead", FALSE, G_PARAM_READWRITE);
|
||||
pspecs[PROP_HAS_SUBMENU] = g_param_spec_boolean ("has-submenu", "has-submenu", "has-submenu", FALSE, G_PARAM_READWRITE);
|
||||
factory = moo_action_factory_new_valist (action_type, first_prop_name, var_args);
|
||||
action = moo_action_factory_create_action (factory, NULL, "name", name, NULL);
|
||||
|
||||
pspecs[PROP_CLOSURE] = g_param_spec_boxed ("closure", "closure", "closure", MOO_TYPE_CLOSURE, G_PARAM_READWRITE);
|
||||
pspecs[PROP_CLOSURE_OBJECT] = g_param_spec_object ("closure-object", "closure-object", "closure-object", G_TYPE_OBJECT, G_PARAM_WRITABLE);
|
||||
pspecs[PROP_CLOSURE_SIGNAL] = g_param_spec_string ("closure-signal", "closure-signal", "closure-signal", NULL, G_PARAM_WRITABLE);
|
||||
pspecs[PROP_CLOSURE_CALLBACK] = g_param_spec_pointer ("closure-callback", "closure-callback", "closure-callback", G_PARAM_WRITABLE);
|
||||
pspecs[PROP_CLOSURE_PROXY_FUNC] = g_param_spec_pointer ("closure-proxy-func", "closure-proxy-func", "closure-proxy-func", G_PARAM_WRITABLE);
|
||||
|
||||
pspecs[PROP_TOGGLED_CALLBACK] = g_param_spec_pointer ("toggled-callback", "toggled-callback", "toggled-callback", G_PARAM_WRITABLE);
|
||||
pspecs[PROP_TOGGLED_OBJECT] = g_param_spec_object ("toggled-object", "toggled-object", "toggled-object", G_TYPE_OBJECT, G_PARAM_WRITABLE);
|
||||
pspecs[PROP_TOGGLED_DATA] = g_param_spec_pointer ("toggled-data", "toggled-data", "toggled-data", G_PARAM_WRITABLE);
|
||||
g_object_unref (factory);
|
||||
return action;
|
||||
}
|
||||
|
||||
|
||||
GtkAction *
|
||||
moo_action_group_add_action (GtkActionGroup *group,
|
||||
const char *action_id,
|
||||
const char *name,
|
||||
const char *first_prop_name,
|
||||
...)
|
||||
{
|
||||
GtkAction *action;
|
||||
GType action_type = GTK_TYPE_ACTION;
|
||||
GType action_type = MOO_TYPE_ACTION;
|
||||
va_list var_args;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_ACTION_GROUP (group), NULL);
|
||||
|
||||
va_start (var_args, first_prop_name);
|
||||
|
||||
if (first_prop_name && (!strcmp (first_prop_name, "action-type::") ||
|
||||
!strcmp (first_prop_name, "action-type::")))
|
||||
if (first_prop_name &&
|
||||
(!strcmp (first_prop_name, "action-type::") || !strcmp (first_prop_name, "action_type::")))
|
||||
{
|
||||
action_type = va_arg (var_args, GType);
|
||||
g_return_val_if_fail (g_type_is_a (action_type, GTK_TYPE_ACTION), NULL);
|
||||
g_return_val_if_fail (g_type_is_a (action_type, MOO_TYPE_ACTION_BASE), NULL);
|
||||
first_prop_name = va_arg (var_args, char*);
|
||||
}
|
||||
|
||||
action = moo_action_new_valist (action_type, action_id, first_prop_name, var_args);
|
||||
action = moo_action_new_valist (action_type, name, first_prop_name, var_args);
|
||||
|
||||
va_end (var_args);
|
||||
|
||||
|
@ -142,15 +108,13 @@ moo_action_group_add_action (GtkActionGroup *group,
|
|||
|
||||
static gboolean
|
||||
collect_valist (GType type,
|
||||
GParameter **real_props_p,
|
||||
guint *n_real_props_p,
|
||||
GParameter **fake_props_p,
|
||||
guint *n_fake_props_p,
|
||||
GParameter **props_p,
|
||||
guint *n_props_p,
|
||||
const char *first_prop_name,
|
||||
va_list var_args)
|
||||
{
|
||||
GObjectClass *klass;
|
||||
GArray *real_props, *fake_props;
|
||||
GArray *props;
|
||||
const char *prop_name;
|
||||
|
||||
g_return_val_if_fail (first_prop_name != NULL, FALSE);
|
||||
|
@ -158,8 +122,7 @@ collect_valist (GType type,
|
|||
klass = g_type_class_ref (type);
|
||||
g_return_val_if_fail (klass != NULL, FALSE);
|
||||
|
||||
real_props = g_array_new (FALSE, TRUE, sizeof (GParameter));
|
||||
fake_props = g_array_new (FALSE, TRUE, sizeof (GParameter));
|
||||
props = g_array_new (FALSE, TRUE, sizeof (GParameter));
|
||||
prop_name = first_prop_name;
|
||||
|
||||
while (prop_name)
|
||||
|
@ -167,25 +130,16 @@ collect_valist (GType type,
|
|||
char *error = NULL;
|
||||
GParameter param;
|
||||
GParamSpec *pspec;
|
||||
GArray *add_to = NULL;
|
||||
|
||||
if ((pspec = _moo_action_find_fake_property (klass, prop_name)))
|
||||
{
|
||||
add_to = fake_props;
|
||||
}
|
||||
else if ((pspec = g_object_class_find_property (klass, prop_name)))
|
||||
{
|
||||
add_to = real_props;
|
||||
}
|
||||
else
|
||||
pspec = g_object_class_find_property (klass, prop_name);
|
||||
|
||||
if (!pspec)
|
||||
{
|
||||
g_warning ("%s: could not find property '%s' for class '%s'",
|
||||
G_STRLOC, prop_name, g_type_name (type));
|
||||
|
||||
moo_param_array_free ((GParameter*) real_props->data, real_props->len);
|
||||
g_array_free (real_props, FALSE);
|
||||
moo_param_array_free ((GParameter*) fake_props->data, fake_props->len);
|
||||
g_array_free (fake_props, FALSE);
|
||||
moo_param_array_free ((GParameter*) props->data, props->len);
|
||||
g_array_free (props, FALSE);
|
||||
|
||||
g_type_class_unref (klass);
|
||||
return FALSE;
|
||||
|
@ -203,26 +157,22 @@ collect_valist (GType type,
|
|||
g_value_unset (¶m.value);
|
||||
g_free ((char*)param.name);
|
||||
|
||||
moo_param_array_free ((GParameter*) real_props->data, real_props->len);
|
||||
g_array_free (real_props, FALSE);
|
||||
moo_param_array_free ((GParameter*) fake_props->data, fake_props->len);
|
||||
g_array_free (fake_props, FALSE);
|
||||
moo_param_array_free ((GParameter*) props->data, props->len);
|
||||
g_array_free (props, FALSE);
|
||||
|
||||
g_type_class_unref (klass);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_array_append_val (add_to, param);
|
||||
g_array_append_val (props, param);
|
||||
|
||||
prop_name = va_arg (var_args, char*);
|
||||
}
|
||||
|
||||
g_type_class_unref (klass);
|
||||
|
||||
*n_real_props_p = real_props->len;
|
||||
*real_props_p = (GParameter*) g_array_free (real_props, FALSE);
|
||||
*n_fake_props_p = fake_props->len;
|
||||
*fake_props_p = (GParameter*) g_array_free (fake_props, FALSE);
|
||||
*n_props_p = props->len;
|
||||
*props_p = (GParameter*) g_array_free (props, FALSE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -235,15 +185,14 @@ moo_action_factory_new_valist (GType action_type,
|
|||
{
|
||||
MooActionFactory *factory;
|
||||
|
||||
g_return_val_if_fail (g_type_is_a (action_type, GTK_TYPE_ACTION), NULL);
|
||||
g_return_val_if_fail (g_type_is_a (action_type, MOO_TYPE_ACTION_BASE), NULL);
|
||||
|
||||
factory = g_object_new (MOO_TYPE_ACTION_FACTORY, NULL);
|
||||
|
||||
factory->action_type = action_type;
|
||||
|
||||
if (!collect_valist (action_type,
|
||||
&factory->real_props, &factory->n_real_props,
|
||||
&factory->fake_props, &factory->n_fake_props,
|
||||
&factory->props, &factory->n_props,
|
||||
first_prop_name, var_args))
|
||||
{
|
||||
g_object_unref (factory);
|
||||
|
@ -289,174 +238,6 @@ param_array_concatenate (GParameter *props1,
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
action_toggled_obj (GtkToggleAction *action,
|
||||
gpointer data)
|
||||
{
|
||||
typedef void (*ToggledFunc) (gpointer data, gboolean active);
|
||||
ToggledFunc func;
|
||||
|
||||
func = g_object_get_data (G_OBJECT (action), "moo-toggle-func");
|
||||
g_return_if_fail (func != NULL && G_IS_OBJECT (data));
|
||||
|
||||
g_object_ref (data);
|
||||
func (data, gtk_toggle_action_get_active (action));
|
||||
g_object_unref (data);
|
||||
}
|
||||
|
||||
static void
|
||||
action_toggled_data (GtkToggleAction *action,
|
||||
gpointer data)
|
||||
{
|
||||
typedef void (*ToggledFunc) (gpointer data, gboolean active);
|
||||
ToggledFunc func;
|
||||
|
||||
func = g_object_get_data (G_OBJECT (action), "moo-toggle-func");
|
||||
g_return_if_fail (func != NULL);
|
||||
|
||||
func (data, gtk_toggle_action_get_active (action));
|
||||
}
|
||||
|
||||
static void
|
||||
toggled_object_died (GtkAction *action,
|
||||
gpointer obj)
|
||||
{
|
||||
G_GNUC_UNUSED guint n;
|
||||
|
||||
n = g_signal_handlers_disconnect_by_func (action, (gpointer) action_toggled_obj, obj);
|
||||
g_assert (n);
|
||||
|
||||
g_object_set_data (G_OBJECT (action), "moo-toggled-ptr", NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
moo_action_set_fake_properties (gpointer action,
|
||||
GParameter *props,
|
||||
guint n_props)
|
||||
{
|
||||
guint i;
|
||||
|
||||
MooClosure *closure = NULL;
|
||||
gpointer closure_object = NULL;
|
||||
const char *closure_signal = NULL;
|
||||
GCallback closure_callback = NULL;
|
||||
GCallback closure_proxy_func = NULL;
|
||||
|
||||
GCallback toggled_callback = NULL;
|
||||
gpointer toggled_data = NULL;
|
||||
gpointer toggled_object = NULL;
|
||||
|
||||
if (!n_props)
|
||||
return;
|
||||
|
||||
for (i = 0; i < n_props; ++i)
|
||||
{
|
||||
const char *name = props[i].name;
|
||||
const GValue *value = &props[i].value;
|
||||
|
||||
if (!strcmp (name, "display-name"))
|
||||
moo_action_set_display_name (action, g_value_get_string (value));
|
||||
else if (!strcmp (name, "accel"))
|
||||
moo_action_set_default_accel (action, g_value_get_string (value));
|
||||
else if (!strcmp (name, "no-accel"))
|
||||
moo_action_set_no_accel (action, g_value_get_boolean (value));
|
||||
else if (!strcmp (name, "force-accel-label"))
|
||||
_moo_action_set_force_accel_label (action, g_value_get_boolean (value));
|
||||
else if (!strcmp (name, "dead"))
|
||||
_moo_action_set_dead (action, g_value_get_boolean (value));
|
||||
else if (!strcmp (name, "has-submenu"))
|
||||
_moo_action_set_has_submenu (action, g_value_get_boolean (value));
|
||||
else if (!strcmp (name, "stock-label"))
|
||||
g_object_set (action, "label", moo_stock_label (g_value_get_string (value)), NULL);
|
||||
else if (!strcmp (name, "stock-display-name"))
|
||||
moo_action_set_display_name (action, moo_stock_name (g_value_get_string (value)));
|
||||
else if (!strcmp (name, "stock-tooltip"))
|
||||
g_object_set (action, "tooltip", moo_stock_name (g_value_get_string (value)), NULL);
|
||||
else if (!strcmp (name, "closure"))
|
||||
closure = g_value_get_boxed (value);
|
||||
else if (!strcmp (name, "closure-object"))
|
||||
closure_object = g_value_get_object (value);
|
||||
else if (!strcmp (name, "closure-signal"))
|
||||
closure_signal = g_value_get_string (value);
|
||||
else if (!strcmp (name, "closure-callback"))
|
||||
closure_callback = g_value_get_pointer (value);
|
||||
else if (!strcmp (name, "closure-proxy-func"))
|
||||
closure_proxy_func = g_value_get_pointer (value);
|
||||
else if (!strcmp (name, "toggled-callback"))
|
||||
toggled_callback = g_value_get_pointer (value);
|
||||
else if (!strcmp (name, "toggled-data"))
|
||||
toggled_data = g_value_get_pointer (value);
|
||||
else if (!strcmp (name, "toggled-object"))
|
||||
toggled_object = g_value_get_object (value);
|
||||
else
|
||||
g_warning ("%s: unknown property '%s'", G_STRLOC, name);
|
||||
}
|
||||
|
||||
if (closure_callback || closure_signal)
|
||||
{
|
||||
if (closure_object)
|
||||
closure = moo_closure_new_simple (closure_object, closure_signal,
|
||||
closure_callback, closure_proxy_func);
|
||||
else
|
||||
g_warning ("%s: closure data missing", G_STRLOC);
|
||||
}
|
||||
|
||||
if (closure)
|
||||
_moo_action_set_closure (action, closure);
|
||||
|
||||
if (toggled_callback)
|
||||
{
|
||||
g_object_set_data (G_OBJECT (action), "moo-toggle-func", toggled_callback);
|
||||
|
||||
if (toggled_object)
|
||||
{
|
||||
MooObjectPtr *old_ptr;
|
||||
gpointer ptr = moo_object_ptr_new (toggled_object,
|
||||
(GWeakNotify) toggled_object_died,
|
||||
action);
|
||||
|
||||
old_ptr = g_object_get_data (G_OBJECT (action), "moo-toggled-ptr");
|
||||
|
||||
if (old_ptr)
|
||||
g_signal_handlers_disconnect_by_func (action,
|
||||
(gpointer) action_toggled_obj,
|
||||
MOO_OBJECT_PTR_GET (old_ptr));
|
||||
|
||||
g_object_set_data_full (G_OBJECT (action), "moo-toggled-ptr",
|
||||
ptr, (GDestroyNotify) moo_object_ptr_free);
|
||||
|
||||
g_signal_connect (action, "toggled",
|
||||
G_CALLBACK (action_toggled_obj),
|
||||
toggled_object);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_signal_connect (action, "toggled",
|
||||
G_CALLBACK (action_toggled_data),
|
||||
toggled_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static gpointer
|
||||
create_from_params (GType action_type,
|
||||
GParameter *real_props,
|
||||
guint n_real_props,
|
||||
GParameter *fake_props,
|
||||
guint n_fake_props)
|
||||
{
|
||||
gpointer action;
|
||||
|
||||
action = g_object_newv (action_type, n_real_props, real_props);
|
||||
g_return_val_if_fail (action != NULL, NULL);
|
||||
|
||||
moo_action_set_fake_properties (action, fake_props, n_fake_props);
|
||||
|
||||
return action;
|
||||
}
|
||||
|
||||
|
||||
gpointer
|
||||
moo_action_factory_create_action (MooActionFactory *factory,
|
||||
gpointer data,
|
||||
|
@ -464,8 +245,8 @@ moo_action_factory_create_action (MooActionFactory *factory,
|
|||
...)
|
||||
{
|
||||
GObject *object;
|
||||
GParameter *real_props, *fake_props, *add_real_props, *add_fake_props;
|
||||
guint n_real_props, n_fake_props, n_add_real_props, n_add_fake_props;
|
||||
GParameter *props, *add_props;
|
||||
guint n_props, n_add_props;
|
||||
va_list var_args;
|
||||
gboolean success;
|
||||
|
||||
|
@ -479,17 +260,14 @@ moo_action_factory_create_action (MooActionFactory *factory,
|
|||
}
|
||||
|
||||
if (!prop_name)
|
||||
return create_from_params (factory->action_type,
|
||||
factory->real_props,
|
||||
factory->n_real_props,
|
||||
factory->fake_props,
|
||||
factory->n_fake_props);
|
||||
return g_object_newv (factory->action_type,
|
||||
factory->n_props,
|
||||
factory->props);
|
||||
|
||||
va_start (var_args, prop_name);
|
||||
|
||||
success = collect_valist (factory->action_type,
|
||||
&add_real_props, &n_add_real_props,
|
||||
&add_fake_props, &n_add_fake_props,
|
||||
&add_props, &n_add_props,
|
||||
prop_name, var_args);
|
||||
|
||||
va_end (var_args);
|
||||
|
@ -497,25 +275,16 @@ moo_action_factory_create_action (MooActionFactory *factory,
|
|||
if (!success)
|
||||
return NULL;
|
||||
|
||||
real_props = param_array_concatenate (factory->real_props,
|
||||
factory->n_real_props,
|
||||
add_real_props,
|
||||
n_add_real_props,
|
||||
&n_real_props);
|
||||
fake_props = param_array_concatenate (factory->fake_props,
|
||||
factory->n_fake_props,
|
||||
add_fake_props,
|
||||
n_add_fake_props,
|
||||
&n_fake_props);
|
||||
props = param_array_concatenate (factory->props,
|
||||
factory->n_props,
|
||||
add_props,
|
||||
n_add_props,
|
||||
&n_props);
|
||||
|
||||
object = create_from_params (factory->action_type,
|
||||
real_props, n_real_props,
|
||||
fake_props, n_fake_props);
|
||||
object = g_object_newv (factory->action_type, n_props, props);
|
||||
|
||||
moo_param_array_free (real_props, n_real_props);
|
||||
moo_param_array_free (fake_props, n_fake_props);
|
||||
moo_param_array_free (add_real_props, n_add_real_props);
|
||||
moo_param_array_free (add_fake_props, n_add_fake_props);
|
||||
moo_param_array_free (props, n_props);
|
||||
moo_param_array_free (add_props, n_add_props);
|
||||
|
||||
return object;
|
||||
}
|
||||
|
@ -529,7 +298,7 @@ moo_action_factory_new (GType action_type,
|
|||
MooActionFactory *factory;
|
||||
va_list var_args;
|
||||
|
||||
g_return_val_if_fail (g_type_is_a (action_type, GTK_TYPE_ACTION), NULL);
|
||||
g_return_val_if_fail (g_type_is_a (action_type, MOO_TYPE_ACTION_BASE), NULL);
|
||||
|
||||
va_start (var_args, first_prop_name);
|
||||
factory = moo_action_factory_new_valist (action_type, first_prop_name, var_args);
|
||||
|
@ -546,39 +315,29 @@ moo_action_factory_new_a (GType action_type,
|
|||
{
|
||||
MooActionFactory *factory;
|
||||
GObjectClass *klass;
|
||||
GArray *real_props, *fake_props;
|
||||
GArray *props;
|
||||
guint i;
|
||||
|
||||
g_return_val_if_fail (g_type_is_a (action_type, GTK_TYPE_ACTION), NULL);
|
||||
g_return_val_if_fail (g_type_is_a (action_type, MOO_TYPE_ACTION_BASE), NULL);
|
||||
|
||||
klass = g_type_class_ref (action_type);
|
||||
real_props = g_array_new (FALSE, TRUE, sizeof (GParameter));
|
||||
fake_props = g_array_new (FALSE, TRUE, sizeof (GParameter));
|
||||
props = g_array_new (FALSE, TRUE, sizeof (GParameter));
|
||||
|
||||
for (i = 0; i < n_params; ++i)
|
||||
{
|
||||
GParameter param;
|
||||
GParamSpec *pspec;
|
||||
GArray *add_to = NULL;
|
||||
const char *prop_name = params[i].name;
|
||||
|
||||
if ((pspec = _moo_action_find_fake_property (klass, prop_name)))
|
||||
{
|
||||
add_to = fake_props;
|
||||
}
|
||||
else if ((pspec = g_object_class_find_property (klass, prop_name)))
|
||||
{
|
||||
add_to = real_props;
|
||||
}
|
||||
else
|
||||
pspec = g_object_class_find_property (klass, prop_name);
|
||||
|
||||
if (!pspec)
|
||||
{
|
||||
g_warning ("%s: could not find property '%s' for class '%s'",
|
||||
G_STRLOC, prop_name, g_type_name (action_type));
|
||||
|
||||
moo_param_array_free ((GParameter*) real_props->data, real_props->len);
|
||||
g_array_free (real_props, FALSE);
|
||||
moo_param_array_free ((GParameter*) fake_props->data, fake_props->len);
|
||||
g_array_free (fake_props, FALSE);
|
||||
moo_param_array_free ((GParameter*) props->data, props->len);
|
||||
g_array_free (props, FALSE);
|
||||
|
||||
g_type_class_unref (klass);
|
||||
return NULL;
|
||||
|
@ -589,7 +348,7 @@ moo_action_factory_new_a (GType action_type,
|
|||
g_value_init (¶m.value, G_PARAM_SPEC_VALUE_TYPE (pspec));
|
||||
g_value_copy (¶ms[i].value, ¶m.value);
|
||||
|
||||
g_array_append_val (add_to, param);
|
||||
g_array_append_val (props, param);
|
||||
}
|
||||
|
||||
g_type_class_unref (klass);
|
||||
|
@ -597,34 +356,13 @@ moo_action_factory_new_a (GType action_type,
|
|||
factory = g_object_new (MOO_TYPE_ACTION_FACTORY, NULL);
|
||||
factory->action_type = action_type;
|
||||
|
||||
factory->n_real_props = real_props->len;
|
||||
factory->real_props = (GParameter*) g_array_free (real_props, FALSE);
|
||||
factory->n_fake_props = fake_props->len;
|
||||
factory->fake_props = (GParameter*) g_array_free (fake_props, FALSE);
|
||||
factory->n_props = props->len;
|
||||
factory->props = (GParameter*) g_array_free (props, FALSE);
|
||||
|
||||
return factory;
|
||||
}
|
||||
|
||||
|
||||
GtkAction *
|
||||
moo_action_new_valist (GType action_type,
|
||||
const char *name,
|
||||
const char *first_prop_name,
|
||||
va_list var_args)
|
||||
{
|
||||
MooActionFactory *factory;
|
||||
GtkAction *action;
|
||||
|
||||
g_return_val_if_fail (g_type_is_a (action_type, GTK_TYPE_ACTION), NULL);
|
||||
|
||||
factory = moo_action_factory_new_valist (action_type, first_prop_name, var_args);
|
||||
action = moo_action_factory_create_action (factory, NULL, "name", name, NULL);
|
||||
|
||||
g_object_unref (factory);
|
||||
return action;
|
||||
}
|
||||
|
||||
|
||||
MooActionFactory*
|
||||
moo_action_factory_new_func (MooActionFactoryFunc factory_func,
|
||||
gpointer data)
|
||||
|
@ -639,50 +377,3 @@ moo_action_factory_new_func (MooActionFactoryFunc factory_func,
|
|||
|
||||
return factory;
|
||||
}
|
||||
|
||||
|
||||
GParamSpec *
|
||||
_moo_action_find_fake_property (GObjectClass *klass,
|
||||
const char *name)
|
||||
{
|
||||
guint i;
|
||||
char *norm_name;
|
||||
GParamSpec *pspec = NULL;
|
||||
|
||||
g_return_val_if_fail (klass != NULL, NULL);
|
||||
g_return_val_if_fail (name != NULL, NULL);
|
||||
|
||||
action_init_props ();
|
||||
norm_name = g_strdelimit (g_strdup (name), "_", '-');
|
||||
|
||||
for (i = 0; i < PROP_LAST; ++i)
|
||||
{
|
||||
if (!strcmp (g_param_spec_get_name (pspecs[i]), norm_name))
|
||||
{
|
||||
pspec = pspecs[i];
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
g_free (norm_name);
|
||||
return pspec;
|
||||
}
|
||||
|
||||
|
||||
GParamSpec *
|
||||
_moo_action_find_property (GObjectClass *klass,
|
||||
const char *name)
|
||||
{
|
||||
GParamSpec *pspec;
|
||||
|
||||
g_return_val_if_fail (klass != NULL, NULL);
|
||||
g_return_val_if_fail (name != NULL, NULL);
|
||||
|
||||
pspec = _moo_action_find_fake_property (klass, name);
|
||||
|
||||
if (!pspec)
|
||||
pspec = g_object_class_find_property (klass, name);
|
||||
|
||||
return pspec;
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#ifndef __MOO_ACTION_FACTORY_H__
|
||||
#define __MOO_ACTION_FACTORY_H__
|
||||
|
||||
#include <mooutils/mooaction.h>
|
||||
#include <gtk/gtkactiongroup.h>
|
||||
|
||||
#ifndef G_GNUC_NULL_TERMINATED
|
||||
#if __GNUC__ >= 4
|
||||
|
@ -49,10 +49,8 @@ struct _MooActionFactory
|
|||
gpointer factory_func_data;
|
||||
|
||||
GType action_type;
|
||||
guint n_real_props;
|
||||
GParameter *real_props;
|
||||
guint n_fake_props;
|
||||
GParameter *fake_props;
|
||||
guint n_props;
|
||||
GParameter *props;
|
||||
};
|
||||
|
||||
struct _MooActionFactoryClass
|
||||
|
@ -82,23 +80,9 @@ gpointer moo_action_factory_create_action(MooActionFactory *factory
|
|||
|
||||
|
||||
GtkAction *moo_action_group_add_action (GtkActionGroup *group,
|
||||
const char *action_id,
|
||||
const char *name,
|
||||
const char *first_prop_name,
|
||||
...) G_GNUC_NULL_TERMINATED;
|
||||
GParamSpec *_moo_action_find_property (GObjectClass *klass,
|
||||
const char *name);
|
||||
GParamSpec *_moo_action_find_fake_property (GObjectClass *klass,
|
||||
const char *name);
|
||||
GtkAction *moo_action_new (GType action_type,
|
||||
const char *first_prop_name,
|
||||
...);
|
||||
GtkAction *moo_action_newv (GType action_type,
|
||||
guint n_parameters,
|
||||
GParameter *parameters);
|
||||
GtkAction *moo_action_new_valist (GType action_type,
|
||||
const char *name,
|
||||
const char *first_property_name,
|
||||
va_list var_args);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
|
|
@ -0,0 +1,226 @@
|
|||
/*
|
||||
* mooactiongroup.c
|
||||
*
|
||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* See COPYING file that comes with this distribution.
|
||||
*/
|
||||
|
||||
#include "mooutils/mooactiongroup.h"
|
||||
|
||||
|
||||
G_DEFINE_TYPE (MooActionGroup, _moo_action_group, GTK_TYPE_ACTION_GROUP)
|
||||
|
||||
|
||||
const char *
|
||||
_moo_action_group_get_display_name (MooActionGroup *group)
|
||||
{
|
||||
const char *name;
|
||||
|
||||
g_return_val_if_fail (MOO_IS_ACTION_GROUP (group), NULL);
|
||||
|
||||
name = group->display_name;
|
||||
|
||||
if (!name)
|
||||
name = gtk_action_group_get_name (GTK_ACTION_GROUP (group));
|
||||
|
||||
if (!name)
|
||||
name = "Actions";
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_action_group_set_display_name (MooActionGroup *group,
|
||||
const char *display_name)
|
||||
{
|
||||
char *tmp;
|
||||
|
||||
g_return_if_fail (MOO_IS_ACTION_GROUP (group));
|
||||
|
||||
tmp = group->display_name;
|
||||
group->display_name = g_strdup (display_name);
|
||||
g_free (tmp);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
_moo_action_group_init (G_GNUC_UNUSED MooActionGroup *group)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
moo_action_group_finalize (GObject *object)
|
||||
{
|
||||
MooActionGroup *group = MOO_ACTION_GROUP (object);
|
||||
|
||||
g_free (group->display_name);
|
||||
|
||||
G_OBJECT_CLASS (_moo_action_group_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
_moo_action_group_class_init (MooActionGroupClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->finalize = moo_action_group_finalize;
|
||||
}
|
||||
|
||||
|
||||
MooActionGroup *
|
||||
_moo_action_group_new (MooActionCollection *collection,
|
||||
const char *name,
|
||||
const char *display_name)
|
||||
{
|
||||
MooActionGroup *group = g_object_new (MOO_TYPE_ACTION_GROUP, "name", name, NULL);
|
||||
group->display_name = g_strdup (display_name);
|
||||
group->collection = collection;
|
||||
return group;
|
||||
}
|
||||
|
||||
|
||||
MooActionCollection *
|
||||
_moo_action_group_get_collection (MooActionGroup *group)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_ACTION_GROUP (group), NULL);
|
||||
return group->collection;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_moo_action_group_set_collection (MooActionGroup *group,
|
||||
MooActionCollection *collection)
|
||||
{
|
||||
g_return_if_fail (MOO_IS_ACTION_GROUP (group));
|
||||
g_return_if_fail (!collection || MOO_IS_ACTION_COLLECTION (collection));
|
||||
group->collection = collection;
|
||||
}
|
||||
|
||||
|
||||
// void
|
||||
// moo_action_group_set_name (MooActionGroup *group,
|
||||
// const char *name)
|
||||
// {
|
||||
// g_return_if_fail (MOO_IS_ACTION_GROUP (group));
|
||||
// action_group_set_display_name (group->priv->default_group, name);
|
||||
// }
|
||||
//
|
||||
//
|
||||
// const char *
|
||||
// moo_action_group_get_name (MooActionGroup *group)
|
||||
// {
|
||||
// g_return_val_if_fail (MOO_IS_ACTION_GROUP (group), NULL);
|
||||
// return action_group_get_display_name (group->priv->default_group);
|
||||
// }
|
||||
//
|
||||
//
|
||||
// static GtkActionGroup *
|
||||
// get_group (MooActionGroup *group,
|
||||
// const char *name)
|
||||
// {
|
||||
// if (name)
|
||||
// return g_hash_table_lookup (group->priv->groups, name);
|
||||
// else
|
||||
// return group->priv->default_group;
|
||||
// }
|
||||
//
|
||||
//
|
||||
// GtkActionGroup *
|
||||
// moo_action_group_add_group (MooActionGroup *group,
|
||||
// const char *name,
|
||||
// const char *display_name)
|
||||
// {
|
||||
// MooActionGroup *group;
|
||||
//
|
||||
// g_return_val_if_fail (MOO_IS_ACTION_GROUP (group), NULL);
|
||||
// g_return_val_if_fail (name != NULL, NULL);
|
||||
// g_return_val_if_fail (get_group (group, name) == NULL, NULL);
|
||||
//
|
||||
// group = _moo_action_group_new (name, display_name);
|
||||
// g_hash_table_insert (group->priv->groups, g_strdup (name), group);
|
||||
// group->priv->groups_list = g_slist_prepend (group->priv->groups_list, group);
|
||||
//
|
||||
// return GTK_ACTION_GROUP (group);
|
||||
// }
|
||||
//
|
||||
//
|
||||
// void
|
||||
// moo_action_group_remove_group (MooActionGroup *group,
|
||||
// GtkActionGroup *group)
|
||||
// {
|
||||
// const char *name;
|
||||
//
|
||||
// g_return_if_fail (MOO_IS_ACTION_GROUP (group));
|
||||
// g_return_if_fail (GTK_IS_ACTION_GROUP (group));
|
||||
//
|
||||
// name = gtk_action_group_get_name (group);
|
||||
// g_return_if_fail (name != NULL);
|
||||
// g_return_if_fail (group == get_group (group, name));
|
||||
//
|
||||
// g_hash_table_remove (group->priv->groups, name);
|
||||
// group->priv->groups_list = g_slist_remove (group->priv->groups_list, group);
|
||||
// }
|
||||
//
|
||||
//
|
||||
// GtkActionGroup *
|
||||
// moo_action_group_get_group (MooActionGroup *group,
|
||||
// const char *name)
|
||||
// {
|
||||
// g_return_val_if_fail (MOO_IS_ACTION_GROUP (group), NULL);
|
||||
// return get_group (group, name);
|
||||
// }
|
||||
//
|
||||
//
|
||||
// const GSList *
|
||||
// moo_action_group_get_groups (MooActionGroup *group)
|
||||
// {
|
||||
// g_return_val_if_fail (MOO_IS_ACTION_GROUP (group), NULL);
|
||||
// return group->priv->groups_list;
|
||||
// }
|
||||
//
|
||||
//
|
||||
// GtkAction *
|
||||
// moo_action_group_get_action (MooActionGroup *group,
|
||||
// const char *name)
|
||||
// {
|
||||
// GSList *l;
|
||||
//
|
||||
// g_return_val_if_fail (MOO_IS_ACTION_GROUP (group), NULL);
|
||||
// g_return_val_if_fail (name != NULL, NULL);
|
||||
//
|
||||
// for (l = group->priv->groups_list; l != NULL; l = l->next)
|
||||
// {
|
||||
// GtkActionGroup *group = l->data;
|
||||
// GtkAction *action = gtk_action_group_get_action (group, name);
|
||||
// if (name)
|
||||
// return action;
|
||||
// }
|
||||
//
|
||||
// return NULL;
|
||||
// }
|
||||
//
|
||||
//
|
||||
// void
|
||||
// moo_action_group_remove_action (MooActionGroup *group,
|
||||
// GtkAction *action)
|
||||
// {
|
||||
// GtkActionGroup *group = NULL;
|
||||
//
|
||||
// g_return_if_fail (MOO_IS_ACTION_GROUP (group));
|
||||
// g_return_if_fail (GTK_IS_ACTION (action));
|
||||
//
|
||||
// g_object_get (action, "action-group", &group, NULL);
|
||||
// g_return_if_fail (group != NULL);
|
||||
// g_return_if_fail (g_slist_find (group->priv->groups_list, group) != NULL);
|
||||
//
|
||||
// gtk_action_group_remove_action (group, action);
|
||||
// }
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* mooactiongroup.h
|
||||
*
|
||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* See COPYING file that comes with this distribution.
|
||||
*/
|
||||
|
||||
#ifndef __MOO_ACTION_GROUP_H__
|
||||
#define __MOO_ACTION_GROUP_H__
|
||||
|
||||
#include <mooutils/mooactioncollection.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
#define MOO_TYPE_ACTION_GROUP (_moo_action_group_get_type ())
|
||||
#define MOO_ACTION_GROUP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MOO_TYPE_ACTION_GROUP, MooActionGroup))
|
||||
#define MOO_ACTION_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOO_TYPE_ACTION_GROUP, MooActionGroupClass))
|
||||
#define MOO_IS_ACTION_GROUP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), MOO_TYPE_ACTION_GROUP))
|
||||
#define MOO_IS_ACTION_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MOO_TYPE_ACTION_GROUP))
|
||||
#define MOO_ACTION_GROUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MOO_TYPE_ACTION_GROUP, MooActionGroupClass))
|
||||
|
||||
typedef struct _MooActionGroup MooActionGroup;
|
||||
typedef struct _MooActionGroupClass MooActionGroupClass;
|
||||
|
||||
struct _MooActionGroup {
|
||||
GtkActionGroup base;
|
||||
char *display_name;
|
||||
MooActionCollection *collection;
|
||||
};
|
||||
|
||||
struct _MooActionGroupClass {
|
||||
GtkActionGroupClass base_class;
|
||||
};
|
||||
|
||||
|
||||
GType _moo_action_group_get_type (void) G_GNUC_CONST;
|
||||
|
||||
MooActionGroup *_moo_action_group_new (MooActionCollection *collection,
|
||||
const char *name,
|
||||
const char *display_name);
|
||||
|
||||
const char *_moo_action_group_get_display_name (MooActionGroup *group);
|
||||
void _moo_action_group_set_display_name (MooActionGroup *group,
|
||||
const char *display_name);
|
||||
|
||||
MooActionCollection *_moo_action_group_get_collection (MooActionGroup *group);
|
||||
void _moo_action_group_set_collection (MooActionGroup *group,
|
||||
MooActionCollection *collection);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __MOO_ACTION_GROUP_H__ */
|
|
@ -12,6 +12,7 @@
|
|||
*/
|
||||
|
||||
#include "mooutils/moomenuaction.h"
|
||||
#include "mooutils/mooaction-private.h"
|
||||
#include "mooutils/moocompat.h"
|
||||
#include "mooutils/moomarshals.h"
|
||||
#include <gtk/gtk.h>
|
||||
|
@ -45,7 +46,7 @@ enum {
|
|||
|
||||
|
||||
/* MOO_TYPE_MENU_ACTION */
|
||||
G_DEFINE_TYPE (MooMenuAction, moo_menu_action, GTK_TYPE_ACTION)
|
||||
G_DEFINE_TYPE (MooMenuAction, moo_menu_action, MOO_TYPE_ACTION)
|
||||
|
||||
|
||||
static void
|
||||
|
@ -74,7 +75,7 @@ static void
|
|||
moo_menu_action_init (MooMenuAction *action)
|
||||
{
|
||||
action->mgr = moo_menu_mgr_new ();
|
||||
moo_action_set_no_accel (GTK_ACTION (action), TRUE);
|
||||
_moo_action_set_no_accel (GTK_ACTION (action), TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
@ -118,7 +119,7 @@ moo_menu_action_set_property (GObject *object,
|
|||
}
|
||||
|
||||
|
||||
static GtkWidget*
|
||||
static GtkWidget *
|
||||
moo_menu_action_create_menu_item (GtkAction *action)
|
||||
{
|
||||
MooMenuAction *menu_action;
|
||||
|
|
|
@ -33,7 +33,7 @@ typedef struct _MooMenuActionClass MooMenuActionClass;
|
|||
|
||||
struct _MooMenuAction
|
||||
{
|
||||
GtkAction base;
|
||||
MooAction base;
|
||||
MooMenuMgr *mgr;
|
||||
gpointer data;
|
||||
guint is_object : 1;
|
||||
|
@ -41,7 +41,7 @@ struct _MooMenuAction
|
|||
|
||||
struct _MooMenuActionClass
|
||||
{
|
||||
GtkActionClass base_class;
|
||||
MooActionClass base_class;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
* See COPYING file that comes with this distribution.
|
||||
*/
|
||||
|
||||
#include "mooutils/mooaction.h"
|
||||
#include "mooutils/mooaction-private.h"
|
||||
#include "mooutils/moouixml.h"
|
||||
#include "mooutils/moocompat.h"
|
||||
#include "mooutils/moomarshals.h"
|
||||
|
@ -61,7 +61,7 @@ typedef struct {
|
|||
Node *node;
|
||||
GtkWidget *widget;
|
||||
GHashTable *children; /* Node* -> GtkWidget* */
|
||||
GtkActionGroup *actions;
|
||||
MooActionCollection *actions;
|
||||
GtkAccelGroup *accel_group;
|
||||
gboolean in_creation;
|
||||
} Toplevel;
|
||||
|
@ -135,7 +135,7 @@ static void merge_remove_node (Merge *merge,
|
|||
Node *node);
|
||||
|
||||
static Toplevel *toplevel_new (Node *node,
|
||||
GtkActionGroup *actions,
|
||||
MooActionCollection *actions,
|
||||
GtkAccelGroup *accel_group);
|
||||
static void toplevel_free (Toplevel *toplevel);
|
||||
static GtkWidget *toplevel_get_widget (Toplevel *toplevel,
|
||||
|
@ -1424,7 +1424,7 @@ out:
|
|||
|
||||
static Toplevel*
|
||||
toplevel_new (Node *node,
|
||||
GtkActionGroup *actions,
|
||||
MooActionCollection *actions,
|
||||
GtkAccelGroup *accel_group)
|
||||
{
|
||||
Toplevel *top;
|
||||
|
@ -1703,7 +1703,7 @@ create_menu_item (MooUIXML *xml,
|
|||
|
||||
g_return_if_fail (toplevel->actions != NULL);
|
||||
|
||||
action = gtk_action_group_get_action (toplevel->actions, item->action);
|
||||
action = moo_action_collection_get_action (toplevel->actions, item->action);
|
||||
|
||||
if (!action)
|
||||
{
|
||||
|
@ -2098,7 +2098,7 @@ create_tool_item (MooUIXML *xml,
|
|||
|
||||
g_return_val_if_fail (toplevel->actions != NULL, FALSE);
|
||||
|
||||
action = gtk_action_group_get_action (toplevel->actions, item->action);
|
||||
action = moo_action_collection_get_action (toplevel->actions, item->action);
|
||||
|
||||
if (!action || _moo_action_get_dead (action))
|
||||
return TRUE;
|
||||
|
@ -2239,7 +2239,7 @@ gpointer
|
|||
moo_ui_xml_create_widget (MooUIXML *xml,
|
||||
MooUIWidgetType type,
|
||||
const char *path,
|
||||
GtkActionGroup *actions,
|
||||
MooActionCollection *actions,
|
||||
GtkAccelGroup *accel_group)
|
||||
{
|
||||
Node *node;
|
||||
|
@ -2248,7 +2248,7 @@ moo_ui_xml_create_widget (MooUIXML *xml,
|
|||
|
||||
g_return_val_if_fail (MOO_IS_UI_XML (xml), NULL);
|
||||
g_return_val_if_fail (path != NULL, NULL);
|
||||
g_return_val_if_fail (!actions || GTK_IS_ACTION_GROUP (actions), NULL);
|
||||
g_return_val_if_fail (!actions || MOO_IS_ACTION_COLLECTION (actions), NULL);
|
||||
|
||||
node = moo_ui_xml_get_node (xml, path);
|
||||
g_return_val_if_fail (node != NULL, NULL);
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#define __MOO_UI_XML_H__
|
||||
|
||||
#include <mooutils/moomarkup.h>
|
||||
#include <gtk/gtkactiongroup.h>
|
||||
#include <mooutils/mooactioncollection.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
@ -130,7 +130,7 @@ MooUINode *moo_ui_node_get_child (MooUINode *node,
|
|||
gpointer moo_ui_xml_create_widget (MooUIXML *xml,
|
||||
MooUIWidgetType type,
|
||||
const char *path,
|
||||
GtkActionGroup *actions,
|
||||
MooActionCollection *actions,
|
||||
GtkAccelGroup *accel_group);
|
||||
GtkWidget *moo_ui_xml_get_widget (MooUIXML *xml,
|
||||
GtkWidget *toplevel,
|
||||
|
|
|
@ -12,7 +12,10 @@
|
|||
*/
|
||||
|
||||
#include "mooutils/moowindow.h"
|
||||
#include "mooutils/mooaction-private.h"
|
||||
#include "mooutils/mooactionbase-private.h"
|
||||
#include "mooutils/moomenuaction.h"
|
||||
#include "mooutils/mooaccelprefs.h"
|
||||
#include "mooutils/mooaccel.h"
|
||||
#include "mooutils/mooprefs.h"
|
||||
#include "mooutils/moomarshals.h"
|
||||
|
@ -49,7 +52,7 @@ struct _MooWindowPrivate {
|
|||
gboolean menubar_visible;
|
||||
|
||||
MooUIXML *ui_xml;
|
||||
GtkActionGroup *actions;
|
||||
MooActionCollection *actions;
|
||||
char *name;
|
||||
char *id;
|
||||
};
|
||||
|
@ -95,6 +98,7 @@ static void moo_window_set_id (MooWindow *window,
|
|||
const char *id);
|
||||
static void moo_window_add_class_actions (MooWindow *window);
|
||||
static void moo_window_add_action (MooWindow *window,
|
||||
const char *group,
|
||||
GtkAction *action);
|
||||
static void moo_window_remove_action (MooWindow *window,
|
||||
const char *action_id);
|
||||
|
@ -159,7 +163,7 @@ moo_window_class_init (MooWindowClass *klass)
|
|||
|
||||
moo_window_class_set_id (klass, "MooWindow", "Window");
|
||||
|
||||
moo_window_class_new_action (klass, "ConfigureShortcuts",
|
||||
moo_window_class_new_action (klass, "ConfigureShortcuts", NULL,
|
||||
"display-name", "Configure Shortcuts",
|
||||
"label", "Configure _Shortcuts...",
|
||||
"tooltip", "Configure _Shortcuts...",
|
||||
|
@ -168,16 +172,16 @@ moo_window_class_init (MooWindowClass *klass)
|
|||
"closure-callback", moo_window_shortcuts_prefs_dialog,
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (klass, "ShowToolbar",
|
||||
"action-type::", GTK_TYPE_TOGGLE_ACTION,
|
||||
moo_window_class_new_action (klass, "ShowToolbar", NULL,
|
||||
"action-type::", MOO_TYPE_TOGGLE_ACTION,
|
||||
"display-name", "Show Toolbar",
|
||||
"label", "Show Toolbar",
|
||||
"tooltip", "Show Toolbar",
|
||||
"condition::active", "toolbar-visible",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (klass, "ShowMenubar",
|
||||
"action-type::", GTK_TYPE_TOGGLE_ACTION,
|
||||
moo_window_class_new_action (klass, "ShowMenubar", NULL,
|
||||
"action-type::", MOO_TYPE_TOGGLE_ACTION,
|
||||
"display-name", "Show Menubar",
|
||||
"label", "Show Menubar",
|
||||
"tooltip", "Show Menubar",
|
||||
|
@ -185,7 +189,7 @@ moo_window_class_init (MooWindowClass *klass)
|
|||
"condition::active", "menubar-visible",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action_custom (klass, TOOLBAR_STYLE_ACTION_ID,
|
||||
moo_window_class_new_action_custom (klass, TOOLBAR_STYLE_ACTION_ID, NULL,
|
||||
create_toolbar_style_action,
|
||||
NULL, NULL);
|
||||
|
||||
|
@ -226,7 +230,7 @@ moo_window_class_init (MooWindowClass *klass)
|
|||
g_param_spec_object ("actions",
|
||||
"actions",
|
||||
"actions",
|
||||
GTK_TYPE_ACTION_GROUP,
|
||||
MOO_TYPE_ACTION_COLLECTION,
|
||||
G_PARAM_READABLE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
|
@ -282,7 +286,7 @@ moo_window_constructor (GType type,
|
|||
klass = g_type_class_ref (type);
|
||||
moo_window_set_id (window, moo_window_class_get_id (klass));
|
||||
window->priv->name = g_strdup (moo_window_class_get_name (klass));
|
||||
window->priv->actions = gtk_action_group_new (window->priv->name);
|
||||
window->priv->actions = moo_action_collection_new (window->priv->id, window->priv->name);
|
||||
|
||||
init_prefs (window);
|
||||
|
||||
|
@ -334,12 +338,12 @@ moo_window_constructor (GType type,
|
|||
moo_window_set_toolbar_visible (window,
|
||||
moo_prefs_get_bool (setting (window, PREFS_SHOW_TOOLBAR)));
|
||||
action = moo_window_get_action (window, "ShowToolbar");
|
||||
moo_sync_toggle_action (action, window, "toolbar-visible", FALSE);
|
||||
_moo_sync_toggle_action (action, window, "toolbar-visible", FALSE);
|
||||
|
||||
moo_window_set_menubar_visible (window,
|
||||
moo_prefs_get_bool (setting (window, PREFS_SHOW_MENUBAR)));
|
||||
action = moo_window_get_action (window, "ShowMenubar");
|
||||
moo_sync_toggle_action (action, window, "menubar-visible", FALSE);
|
||||
_moo_sync_toggle_action (action, window, "menubar-visible", FALSE);
|
||||
|
||||
moo_window_update_ui (window);
|
||||
|
||||
|
@ -557,7 +561,7 @@ moo_window_update_toolbar (MooWindow *window)
|
|||
MooUIXML *xml;
|
||||
GtkToolbarStyle style;
|
||||
char *ui_name;
|
||||
GtkActionGroup *actions;
|
||||
MooActionCollection *actions;
|
||||
|
||||
g_return_if_fail (MOO_IS_WINDOW (window));
|
||||
|
||||
|
@ -607,7 +611,7 @@ moo_window_update_menubar (MooWindow *window)
|
|||
{
|
||||
MooUIXML *xml;
|
||||
char *ui_name;
|
||||
GtkActionGroup *actions;
|
||||
MooActionCollection *actions;
|
||||
|
||||
g_return_if_fail (MOO_IS_WINDOW (window));
|
||||
|
||||
|
@ -802,6 +806,7 @@ static GtkToolbarStyle get_toolbar_style (MooWindow *window)
|
|||
|
||||
typedef struct {
|
||||
MooActionFactory *action;
|
||||
char *group;
|
||||
char **conditions;
|
||||
} ActionInfo;
|
||||
|
||||
|
@ -831,6 +836,7 @@ get_quark__ (guint n)
|
|||
|
||||
static ActionInfo*
|
||||
action_info_new (MooActionFactory *action,
|
||||
const char *group,
|
||||
char **conditions)
|
||||
{
|
||||
ActionInfo *info;
|
||||
|
@ -839,6 +845,7 @@ action_info_new (MooActionFactory *action,
|
|||
|
||||
info = g_new0 (ActionInfo, 1);
|
||||
info->action = g_object_ref (action);
|
||||
info->group = g_strdup (group);
|
||||
info->conditions = g_strdupv (conditions);
|
||||
|
||||
return info;
|
||||
|
@ -870,11 +877,22 @@ create_action (const char *action_id,
|
|||
g_return_val_if_fail (action_id && action_id[0], NULL);
|
||||
|
||||
class_id = moo_window_class_get_id (MOO_WINDOW_CLASS (G_OBJECT_GET_CLASS (window)));
|
||||
|
||||
if (g_type_is_a (info->action->action_type, MOO_TYPE_ACTION))
|
||||
action = moo_action_factory_create_action (info->action, window,
|
||||
"closure-object", window,
|
||||
"name", action_id,
|
||||
NULL);
|
||||
else if (g_type_is_a (info->action->action_type, MOO_TYPE_TOGGLE_ACTION))
|
||||
action = moo_action_factory_create_action (info->action, window,
|
||||
"toggled-object", window,
|
||||
"name", action_id,
|
||||
NULL);
|
||||
else
|
||||
action = moo_action_factory_create_action (info->action, window,
|
||||
"name", action_id,
|
||||
NULL);
|
||||
|
||||
g_return_val_if_fail (action != NULL, NULL);
|
||||
|
||||
if (info->conditions)
|
||||
|
@ -891,7 +909,7 @@ create_action (const char *action_id,
|
|||
condition = p[0];
|
||||
|
||||
if (!strcmp (condition, "active"))
|
||||
moo_sync_toggle_action (action, window, prop, invert);
|
||||
_moo_sync_toggle_action (action, window, prop, invert);
|
||||
else
|
||||
moo_bind_bool_property (action, condition, window, prop, invert);
|
||||
}
|
||||
|
@ -929,6 +947,7 @@ static void
|
|||
moo_window_class_install_action (MooWindowClass *klass,
|
||||
const char *action_id,
|
||||
MooActionFactory *action,
|
||||
const char *group,
|
||||
char **conditions)
|
||||
{
|
||||
GHashTable *actions;
|
||||
|
@ -953,7 +972,7 @@ moo_window_class_install_action (MooWindowClass *klass,
|
|||
if (g_hash_table_lookup (actions, action_id))
|
||||
moo_window_class_remove_action (klass, action_id);
|
||||
|
||||
info = action_info_new (action, conditions);
|
||||
info = action_info_new (action, group, conditions);
|
||||
g_hash_table_insert (actions, g_strdup (action_id), info);
|
||||
|
||||
for (l = window_instances; l != NULL; l = l->next)
|
||||
|
@ -963,7 +982,7 @@ moo_window_class_install_action (MooWindowClass *klass,
|
|||
GtkAction *action = create_action (action_id, info, l->data);
|
||||
|
||||
if (action)
|
||||
moo_window_add_action (l->data, action);
|
||||
moo_window_add_action (l->data, group, action);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -990,6 +1009,7 @@ custom_action_factory_func (MooWindow *window,
|
|||
void
|
||||
moo_window_class_new_action_custom (MooWindowClass *klass,
|
||||
const char *action_id,
|
||||
const char *group,
|
||||
MooWindowActionFunc func,
|
||||
gpointer data,
|
||||
GDestroyNotify notify)
|
||||
|
@ -1001,14 +1021,11 @@ moo_window_class_new_action_custom (MooWindowClass *klass,
|
|||
g_return_if_fail (func != NULL);
|
||||
|
||||
action_factory = moo_action_factory_new_func ((MooActionFactoryFunc) custom_action_factory_func, NULL);
|
||||
g_object_set_data (G_OBJECT (action_factory), "moo-window-class", klass);
|
||||
g_object_set_data_full (G_OBJECT (action_factory), "moo-window-class-action-id",
|
||||
g_strdup (action_id), g_free);
|
||||
g_object_set_data (G_OBJECT (action_factory), "moo-window-class-action-func", func);
|
||||
g_object_set_data_full (G_OBJECT (action_factory), "moo-window-class-action-func-data",
|
||||
data, notify);
|
||||
|
||||
moo_window_class_install_action (klass, action_id, action_factory, NULL);
|
||||
moo_window_class_install_action (klass, action_id, action_factory, group, NULL);
|
||||
g_object_unref (action_factory);
|
||||
}
|
||||
|
||||
|
@ -1016,12 +1033,13 @@ moo_window_class_new_action_custom (MooWindowClass *klass,
|
|||
void
|
||||
moo_window_class_new_action (MooWindowClass *klass,
|
||||
const char *action_id,
|
||||
const char *group,
|
||||
const char *first_prop_name,
|
||||
...)
|
||||
{
|
||||
va_list args;
|
||||
va_start (args, first_prop_name);
|
||||
moo_window_class_new_actionv (klass, action_id, first_prop_name, args);
|
||||
moo_window_class_new_actionv (klass, action_id, group, first_prop_name, args);
|
||||
va_end (args);
|
||||
}
|
||||
|
||||
|
@ -1094,7 +1112,7 @@ moo_window_set_ui_xml (MooWindow *window,
|
|||
}
|
||||
|
||||
|
||||
GtkActionGroup*
|
||||
MooActionCollection *
|
||||
moo_window_get_actions (MooWindow *window)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_WINDOW (window), NULL);
|
||||
|
@ -1108,7 +1126,7 @@ moo_window_get_action (MooWindow *window,
|
|||
{
|
||||
g_return_val_if_fail (MOO_IS_WINDOW (window), NULL);
|
||||
g_return_val_if_fail (action != NULL, NULL);
|
||||
return gtk_action_group_get_action (window->priv->actions, action);
|
||||
return moo_action_collection_get_action (window->priv->actions, action);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1148,7 +1166,7 @@ add_action (const char *id,
|
|||
GtkAction *action = create_action (id, info, window);
|
||||
|
||||
if (action)
|
||||
moo_window_add_action (window, action);
|
||||
moo_window_add_action (window, info->group, action);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1197,27 +1215,30 @@ moo_window_class_set_id (MooWindowClass *klass,
|
|||
|
||||
static void
|
||||
moo_window_add_action (MooWindow *window,
|
||||
const char *group_name,
|
||||
GtkAction *action)
|
||||
{
|
||||
GtkActionGroup *group;
|
||||
MooActionCollection *coll;
|
||||
|
||||
g_return_if_fail (MOO_IS_WINDOW (window));
|
||||
g_return_if_fail (GTK_IS_ACTION (action));
|
||||
g_return_if_fail (MOO_IS_ACTION_BASE (action));
|
||||
|
||||
coll = moo_window_get_actions (window);
|
||||
group = moo_action_collection_get_group (coll, group_name);
|
||||
g_return_if_fail (group != NULL);
|
||||
|
||||
group = moo_window_get_actions (window);
|
||||
gtk_action_group_add_action (group, action);
|
||||
|
||||
if (!_moo_action_get_dead (action))
|
||||
if (!_moo_action_get_dead (action) && !_moo_action_get_no_accel (action))
|
||||
{
|
||||
const char *accel, *default_accel, *accel_path;
|
||||
char *accel_path;
|
||||
|
||||
accel_path = _moo_action_make_accel_path (window->priv->id, gtk_action_get_name (action));
|
||||
accel_path = _moo_action_make_accel_path (action);
|
||||
_moo_action_set_accel_path (action, accel_path);
|
||||
_moo_accel_register (accel_path, _moo_action_get_default_accel (action));
|
||||
|
||||
accel = _moo_prefs_get_accel (accel_path);
|
||||
default_accel = moo_action_get_default_accel (action);
|
||||
|
||||
_moo_set_accel (accel_path, accel ? accel : default_accel);
|
||||
g_free (accel_path);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1226,23 +1247,24 @@ static void
|
|||
moo_window_remove_action (MooWindow *window,
|
||||
const char *action_id)
|
||||
{
|
||||
GtkActionGroup *group;
|
||||
MooActionCollection *coll;
|
||||
GtkAction *action;
|
||||
|
||||
g_return_if_fail (MOO_IS_WINDOW (window));
|
||||
g_return_if_fail (action_id != NULL);
|
||||
|
||||
group = moo_window_get_actions (window);
|
||||
action = gtk_action_group_get_action (group, action_id);
|
||||
coll = moo_window_get_actions (window);
|
||||
action = moo_action_collection_get_action (coll, action_id);
|
||||
|
||||
if (action)
|
||||
gtk_action_group_remove_action (group, action);
|
||||
moo_action_collection_remove_action (coll, action);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
moo_window_class_new_actionv (MooWindowClass *klass,
|
||||
const char *action_id,
|
||||
const char *group,
|
||||
const char *first_prop_name,
|
||||
va_list var_args)
|
||||
{
|
||||
|
@ -1286,9 +1308,9 @@ moo_window_class_new_actionv (MooWindowClass *klass,
|
|||
|
||||
action_type = moo_value_get_gtype (¶m.value);
|
||||
|
||||
if (!g_type_is_a (action_type, GTK_TYPE_ACTION))
|
||||
if (!g_type_is_a (action_type, MOO_TYPE_ACTION_BASE))
|
||||
{
|
||||
g_warning ("%s: invalid action type", G_STRLOC);
|
||||
g_warning ("%s: invalid action type %s", G_STRLOC, g_type_name (action_type));
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -1323,11 +1345,11 @@ moo_window_class_new_actionv (MooWindowClass *klass,
|
|||
if (!action_class)
|
||||
{
|
||||
if (!action_type)
|
||||
action_type = GTK_TYPE_ACTION;
|
||||
action_type = MOO_TYPE_ACTION;
|
||||
action_class = g_type_class_ref (action_type);
|
||||
}
|
||||
|
||||
pspec = _moo_action_find_property (action_class, name);
|
||||
pspec = g_object_class_find_property (action_class, name);
|
||||
|
||||
if (!pspec)
|
||||
{
|
||||
|
@ -1378,6 +1400,7 @@ moo_window_class_new_actionv (MooWindowClass *klass,
|
|||
moo_window_class_install_action (klass,
|
||||
action_id,
|
||||
action_factory,
|
||||
group,
|
||||
(char**) conditions->pdata);
|
||||
|
||||
g_strfreev ((char**) conditions->pdata);
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
|
||||
#include <mooutils/mooutils-gobject.h>
|
||||
#include <mooutils/moouixml.h>
|
||||
#include <mooutils/mooactioncollection.h>
|
||||
#include <gtk/gtkwindow.h>
|
||||
#include <gtk/gtkactiongroup.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
@ -75,18 +75,29 @@ void moo_window_class_set_id (MooWindowClass *klass,
|
|||
|
||||
void moo_window_class_new_action (MooWindowClass *klass,
|
||||
const char *id,
|
||||
const char *group,
|
||||
const char *first_prop_name,
|
||||
...) G_GNUC_NULL_TERMINATED;
|
||||
void moo_window_class_new_actionv (MooWindowClass *klass,
|
||||
const char *id,
|
||||
const char *group,
|
||||
const char *first_prop_name,
|
||||
va_list props);
|
||||
void moo_window_class_new_action_custom (MooWindowClass *klass,
|
||||
const char *id,
|
||||
const char *group,
|
||||
MooWindowActionFunc func,
|
||||
gpointer data,
|
||||
GDestroyNotify notify);
|
||||
|
||||
void moo_window_class_new_group (MooWindowClass *klass,
|
||||
const char *name,
|
||||
const char *display_name);
|
||||
gboolean moo_window_class_find_group (MooWindowClass *klass,
|
||||
const char *name);
|
||||
void moo_window_class_remove_group (MooWindowClass *klass,
|
||||
const char *name);
|
||||
|
||||
gboolean moo_window_class_find_action (MooWindowClass *klass,
|
||||
const char *id);
|
||||
void moo_window_class_remove_action (MooWindowClass *klass,
|
||||
|
@ -96,7 +107,7 @@ MooUIXML *moo_window_get_ui_xml (MooWindow *window);
|
|||
void moo_window_set_ui_xml (MooWindow *window,
|
||||
MooUIXML *xml);
|
||||
|
||||
GtkActionGroup *moo_window_get_actions (MooWindow *window);
|
||||
MooActionCollection *moo_window_get_actions (MooWindow *window);
|
||||
GtkAction *moo_window_get_action (MooWindow *window,
|
||||
const char *action);
|
||||
|
||||
|
|
|
@ -100,21 +100,21 @@ static void init_actions (void)
|
|||
|
||||
g_return_if_fail (klass != NULL);
|
||||
|
||||
moo_window_class_new_action (klass, "Preferences",
|
||||
moo_window_class_new_action (klass, "Preferences", NULL,
|
||||
"display-name", "Preferences",
|
||||
"label", "Preferences",
|
||||
"tooltip", "Preferences",
|
||||
"stock-id", GTK_STOCK_PREFERENCES,
|
||||
"closure-callback", show_preferences,
|
||||
NULL);
|
||||
moo_window_class_new_action (klass, "Quit",
|
||||
moo_window_class_new_action (klass, "Quit", NULL,
|
||||
"display-name", "Quit",
|
||||
"label", "_Quit",
|
||||
"tooltip", "Quit",
|
||||
"stock-id", GTK_STOCK_QUIT,
|
||||
"closure-callback", quit,
|
||||
NULL);
|
||||
moo_window_class_new_action (klass, "About",
|
||||
moo_window_class_new_action (klass, "About", NULL,
|
||||
"display-name", "About",
|
||||
"label", "About",
|
||||
"tooltip", "About",
|
||||
|
|
Loading…
Reference in New Issue