summaryrefslogtreecommitdiff
path: root/matecomponent/panel-module/mate-panel-applet-frame-matecomponent.c
diff options
context:
space:
mode:
Diffstat (limited to 'matecomponent/panel-module/mate-panel-applet-frame-matecomponent.c')
-rw-r--r--matecomponent/panel-module/mate-panel-applet-frame-matecomponent.c759
1 files changed, 0 insertions, 759 deletions
diff --git a/matecomponent/panel-module/mate-panel-applet-frame-matecomponent.c b/matecomponent/panel-module/mate-panel-applet-frame-matecomponent.c
deleted file mode 100644
index e62a13a7..00000000
--- a/matecomponent/panel-module/mate-panel-applet-frame-matecomponent.c
+++ /dev/null
@@ -1,759 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * mate-panel-applet-frame-matecomponent.c: panel side container for applets
- *
- * Copyright (C) 2001 - 2003 Sun Microsystems, Inc.
- * Copyright (C) 2010 Vincent Untz <[email protected]>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- *
- * Authors:
- * Mark McLoughlin <[email protected]>
- */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <libmatecomponentui.h>
-
-#include <mate-panel-applet-frame.h>
-#include <mate-panel-applets-manager.h>
-
-#include "MATE_Panel.h"
-
-#include "mate-panel-applet-frame-matecomponent.h"
-
-G_DEFINE_TYPE (MatePanelAppletFrameMateComponent,
- mate_panel_applet_frame_matecomponent,
- PANEL_TYPE_APPLET_FRAME)
-
-struct _MatePanelAppletFrameMateComponentPrivate
-{
- MATE_Vertigo_MatePanelAppletShell applet_shell;
- CORBA_Object control;
- MateComponent_PropertyBag property_bag;
- MateComponentUIComponent *ui_component;
-};
-
-#define PROPERTY_ORIENT "mate-panel-applet-orient"
-#define PROPERTY_SIZE "mate-panel-applet-size"
-#define PROPERTY_BACKGROUND "mate-panel-applet-background"
-#define PROPERTY_FLAGS "mate-panel-applet-flags"
-#define PROPERTY_SIZE_HINTS "mate-panel-applet-size-hints"
-#define PROPERTY_LOCKED_DOWN "mate-panel-applet-locked-down"
-
-typedef enum {
- PANEL_SIZE_XX_SMALL = MATE_Vertigo_PANEL_XX_SMALL,
- PANEL_SIZE_X_SMALL = MATE_Vertigo_PANEL_X_SMALL,
- PANEL_SIZE_SMALL = MATE_Vertigo_PANEL_SMALL,
- PANEL_SIZE_MEDIUM = MATE_Vertigo_PANEL_MEDIUM,
- PANEL_SIZE_LARGE = MATE_Vertigo_PANEL_LARGE,
- PANEL_SIZE_X_LARGE = MATE_Vertigo_PANEL_X_LARGE,
- PANEL_SIZE_XX_LARGE = MATE_Vertigo_PANEL_XX_LARGE
-} PanelSize;
-
-/* Keep in sync with mate-panel-applet.h. Uggh. */
-typedef enum {
- APPLET_FLAGS_NONE = 0,
- APPLET_EXPAND_MAJOR = 1 << 0,
- APPLET_EXPAND_MINOR = 1 << 1,
- APPLET_HAS_HANDLE = 1 << 2
-} MatePanelAppletFlags;
-
-GQuark
-mate_panel_applet_frame_matecomponent_error_quark (void)
-{
- static GQuark ret = 0;
-
- if (ret == 0) {
- ret = g_quark_from_static_string ("mate_panel_applet_frame_matecomponent_error");
- }
-
- return ret;
-}
-
-static guint
-get_mate_panel_applet_orient (PanelOrientation orientation)
-{
- /* For some reason libmate-panel-applet and panel use a different logic for
- * orientation, so we need to convert it. We should fix this. */
- switch (orientation) {
- case PANEL_ORIENTATION_TOP:
- return 1;
- case PANEL_ORIENTATION_BOTTOM:
- return 0;
- case PANEL_ORIENTATION_LEFT:
- return 3;
- case PANEL_ORIENTATION_RIGHT:
- return 2;
- default:
- g_assert_not_reached ();
- break;
- }
-}
-
-static void
-mate_panel_applet_frame_matecomponent_update_flags (MatePanelAppletFrame *frame,
- const CORBA_any *any)
-{
- int flags;
- gboolean major;
- gboolean minor;
- gboolean has_handle;
-
- flags = MATECOMPONENT_ARG_GET_SHORT (any);
-
- major = (flags & APPLET_EXPAND_MAJOR) != 0;
- minor = (flags & APPLET_EXPAND_MINOR) != 0;
- has_handle = (flags & APPLET_HAS_HANDLE) != 0;
-
- _mate_panel_applet_frame_update_flags (frame, major, minor, has_handle);
-}
-
-static void
-mate_panel_applet_frame_matecomponent_update_size_hints (MatePanelAppletFrame *frame,
- const CORBA_any *any)
-{
- CORBA_sequence_CORBA_long *seq;
-
- seq = any->_value;
-
- _mate_panel_applet_frame_update_size_hints (frame, seq->_buffer, seq->_length);
-}
-
-static void
-mate_panel_applet_frame_matecomponent_init_properties (MatePanelAppletFrame *frame)
-{
- MatePanelAppletFrameMateComponent *matecomponent_frame = MATE_PANEL_APPLET_FRAME_MATECOMPONENT (frame);
- CORBA_any *any;
-
- any = matecomponent_pbclient_get_value (matecomponent_frame->priv->property_bag,
- PROPERTY_FLAGS,
- MATECOMPONENT_ARG_SHORT,
- NULL);
- if (any) {
- mate_panel_applet_frame_matecomponent_update_flags (frame, any);
- CORBA_free (any);
- }
-
- any = matecomponent_pbclient_get_value (matecomponent_frame->priv->property_bag,
- PROPERTY_SIZE_HINTS,
- TC_CORBA_sequence_CORBA_long,
- NULL);
- if (any) {
- mate_panel_applet_frame_matecomponent_update_size_hints (frame, any);
- CORBA_free (any);
- }
-}
-
-static void
-mate_panel_applet_frame_matecomponent_sync_menu_state (MatePanelAppletFrame *frame,
- gboolean movable,
- gboolean removable,
- gboolean lockable,
- gboolean locked,
- gboolean locked_down)
-{
- MatePanelAppletFrameMateComponent *matecomponent_frame = MATE_PANEL_APPLET_FRAME_MATECOMPONENT (frame);
-
- matecomponent_ui_component_set_prop (matecomponent_frame->priv->ui_component,
- "/commands/LockAppletToPanel",
- "state",
- locked ? "1" : "0",
- NULL);
-
- /* First sensitivity */
- matecomponent_ui_component_set_prop (matecomponent_frame->priv->ui_component,
- "/commands/LockAppletToPanel",
- "sensitive",
- lockable ? "1" : "0",
- NULL);
-
- matecomponent_ui_component_set_prop (matecomponent_frame->priv->ui_component,
- "/commands/RemoveAppletFromPanel",
- "sensitive",
- (locked && !lockable) ? "0" : (removable ? "1" : "0"),
- NULL);
-
- matecomponent_ui_component_set_prop (matecomponent_frame->priv->ui_component,
- "/commands/MoveApplet",
- "sensitive",
- locked ? "0" : (movable ? "1" : "0"),
- NULL);
-
- matecomponent_ui_component_set_prop (matecomponent_frame->priv->ui_component,
- "/commands/LockAppletToPanel",
- "hidden",
- locked_down ? "1" : "0",
- NULL);
-
- matecomponent_ui_component_set_prop (matecomponent_frame->priv->ui_component,
- "/commands/LockSeparator",
- "hidden",
- locked_down ? "1" : "0",
- NULL);
-
- matecomponent_ui_component_set_prop (matecomponent_frame->priv->ui_component,
- "/commands/RemoveAppletFromPanel",
- "hidden",
- locked_down ? "1" : "0",
- NULL);
-
- matecomponent_ui_component_set_prop (matecomponent_frame->priv->ui_component,
- "/commands/MoveApplet",
- "hidden",
- locked_down ? "1" : "0",
- NULL);
-}
-
-static void
-mate_panel_applet_frame_matecomponent_popup_menu (MatePanelAppletFrame *frame,
- guint button,
- guint32 timestamp)
-{
- MatePanelAppletFrameMateComponent *matecomponent_frame = MATE_PANEL_APPLET_FRAME_MATECOMPONENT (frame);
- CORBA_Environment env;
-
- CORBA_exception_init (&env);
-
- MATE_Vertigo_MatePanelAppletShell_popup_menu (matecomponent_frame->priv->applet_shell,
- button, timestamp, &env);
- if (MATECOMPONENT_EX (&env))
- g_warning ("Exception from popup_menu '%s'\n", env._id);
-
- CORBA_exception_free (&env);
-}
-
-static void
-mate_panel_applet_frame_matecomponent_change_orientation (MatePanelAppletFrame *frame,
- PanelOrientation orientation)
-{
- MatePanelAppletFrameMateComponent *matecomponent_frame = MATE_PANEL_APPLET_FRAME_MATECOMPONENT (frame);
- CORBA_unsigned_short orient = 0;
-
- switch (orientation) {
- case PANEL_ORIENTATION_TOP:
- orient = MATE_Vertigo_PANEL_ORIENT_DOWN;
- break;
- case PANEL_ORIENTATION_BOTTOM:
- orient = MATE_Vertigo_PANEL_ORIENT_UP;
- break;
- case PANEL_ORIENTATION_LEFT:
- orient = MATE_Vertigo_PANEL_ORIENT_RIGHT;
- break;
- case PANEL_ORIENTATION_RIGHT:
- orient = MATE_Vertigo_PANEL_ORIENT_LEFT;
- break;
- default:
- g_assert_not_reached ();
- break;
- }
-
- matecomponent_pbclient_set_short (matecomponent_frame->priv->property_bag,
- PROPERTY_ORIENT,
- orient,
- NULL);
-
- gtk_widget_queue_resize (GTK_WIDGET (frame));
-}
-
-static void
-mate_panel_applet_frame_matecomponent_change_size (MatePanelAppletFrame *frame,
- guint size)
-{
- MatePanelAppletFrameMateComponent *matecomponent_frame = MATE_PANEL_APPLET_FRAME_MATECOMPONENT (frame);
-
- /* Normalise the size to the constants defined in the IDL. */
- size = size <= PANEL_SIZE_XX_SMALL ? PANEL_SIZE_XX_SMALL :
- size <= PANEL_SIZE_X_SMALL ? PANEL_SIZE_X_SMALL :
- size <= PANEL_SIZE_SMALL ? PANEL_SIZE_SMALL :
- size <= PANEL_SIZE_MEDIUM ? PANEL_SIZE_MEDIUM :
- size <= PANEL_SIZE_LARGE ? PANEL_SIZE_LARGE :
- size <= PANEL_SIZE_X_LARGE ? PANEL_SIZE_X_LARGE : PANEL_SIZE_XX_LARGE;
-
- matecomponent_pbclient_set_short (matecomponent_frame->priv->property_bag,
- PROPERTY_SIZE,
- size,
- NULL);
-}
-
-static void
-mate_panel_applet_frame_matecomponent_change_background (MatePanelAppletFrame *frame,
- PanelBackgroundType type)
-{
- MatePanelAppletFrameMateComponent *matecomponent_frame = MATE_PANEL_APPLET_FRAME_MATECOMPONENT (frame);
- char *bg_str;
-
- bg_str = _mate_panel_applet_frame_get_background_string (
- frame, PANEL_WIDGET (GTK_WIDGET (frame)->parent), type);
-
- if (bg_str != NULL) {
- matecomponent_pbclient_set_string (matecomponent_frame->priv->property_bag,
- PROPERTY_BACKGROUND,
- bg_str, NULL);
-
- g_free (bg_str);
- }
-}
-
-static void
-mate_panel_applet_frame_matecomponent_applet_broken (MateCORBAConnection *cnx,
- MatePanelAppletFrame *frame)
-{
- _mate_panel_applet_frame_applet_broken (frame);
-}
-
-static void
-popup_handle_remove (MateComponentUIComponent *uic,
- MatePanelAppletFrame *frame,
- const gchar *verbname)
-{
- _mate_panel_applet_frame_applet_remove (frame);
-}
-
-static void
-popup_handle_move (MateComponentUIComponent *uic,
- MatePanelAppletFrame *frame,
- const gchar *verbname)
-{
- _mate_panel_applet_frame_applet_move (frame);
-}
-
-static void
-listener_popup_handle_lock (MateComponentUIComponent *uic,
- const char *path,
- MateComponent_UIComponent_EventType type,
- const char *state,
- gpointer data)
-{
- MatePanelAppletFrame *frame;
- gboolean locked;
-
- g_assert (!strcmp (path, "LockAppletToPanel"));
-
- if (type != MateComponent_UIComponent_STATE_CHANGED)
- return;
-
- if (!state)
- return;
-
- frame = (MatePanelAppletFrame *) data;
- locked = (strcmp (state, "1") == 0);
-
- _mate_panel_applet_frame_applet_lock (frame, locked);
-
- mate_panel_applet_frame_sync_menu_state (frame);
-}
-
-static MateComponentUIVerb popup_verbs [] = {
- MATECOMPONENT_UI_UNSAFE_VERB ("RemoveAppletFromPanel", popup_handle_remove),
- MATECOMPONENT_UI_UNSAFE_VERB ("MoveApplet", popup_handle_move),
-
- MATECOMPONENT_UI_VERB_END
-};
-
-
-static void
-mate_panel_applet_frame_matecomponent_finalize (GObject *object)
-{
- MatePanelAppletFrameMateComponent *frame = MATE_PANEL_APPLET_FRAME_MATECOMPONENT (object);
-
- if (frame->priv->control) {
- /* do this before unref'ing every matecomponent stuff since it looks
- * like we can receive some events when unref'ing them */
- MateCORBA_small_unlisten_for_broken (frame->priv->control,
- G_CALLBACK (mate_panel_applet_frame_matecomponent_applet_broken));
- matecomponent_object_release_unref (frame->priv->control, NULL);
- frame->priv->control = CORBA_OBJECT_NIL;
- }
-
- if (frame->priv->property_bag)
- matecomponent_object_release_unref (
- frame->priv->property_bag, NULL);
-
- if (frame->priv->applet_shell)
- matecomponent_object_release_unref (
- frame->priv->applet_shell, NULL);
-
- if (frame->priv->ui_component)
- matecomponent_object_unref (
- MATECOMPONENT_OBJECT (frame->priv->ui_component));
-
- G_OBJECT_CLASS (mate_panel_applet_frame_matecomponent_parent_class)->finalize (object);
-}
-
-static void
-mate_panel_applet_frame_matecomponent_init (MatePanelAppletFrameMateComponent *frame)
-{
- GtkWidget *container;
-
- frame->priv = G_TYPE_INSTANCE_GET_PRIVATE (frame,
- PANEL_TYPE_APPLET_FRAME_MATECOMPONENT,
- MatePanelAppletFrameMateComponentPrivate);
-
- frame->priv->applet_shell = CORBA_OBJECT_NIL;
- frame->priv->control = CORBA_OBJECT_NIL;
- frame->priv->property_bag = CORBA_OBJECT_NIL;
- frame->priv->ui_component = NULL;
-}
-
-static void
-mate_panel_applet_frame_matecomponent_class_init (MatePanelAppletFrameMateComponentClass *class)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (class);
- MatePanelAppletFrameClass *frame_class = MATE_PANEL_APPLET_FRAME_CLASS (class);
-
- gobject_class->finalize = mate_panel_applet_frame_matecomponent_finalize;
-
- frame_class->init_properties = mate_panel_applet_frame_matecomponent_init_properties;
- frame_class->sync_menu_state = mate_panel_applet_frame_matecomponent_sync_menu_state;
- frame_class->popup_menu = mate_panel_applet_frame_matecomponent_popup_menu;
- frame_class->change_orientation = mate_panel_applet_frame_matecomponent_change_orientation;
- frame_class->change_size = mate_panel_applet_frame_matecomponent_change_size;
- frame_class->change_background = mate_panel_applet_frame_matecomponent_change_background;
-
- g_type_class_add_private (class, sizeof (MatePanelAppletFrameMateComponentPrivate));
-}
-
-static MATE_Vertigo_MatePanelAppletShell
-mate_panel_applet_frame_get_applet_shell (MateComponent_Control control)
-{
- CORBA_Environment env;
- MATE_Vertigo_MatePanelAppletShell retval;
-
- CORBA_exception_init (&env);
-
- retval = MateComponent_Unknown_queryInterface (control,
- "IDL:MATE/Vertigo/MatePanelAppletShell:1.0",
- &env);
- if (MATECOMPONENT_EX (&env)) {
- g_warning ("Unable to obtain AppletShell interface from control\n");
-
- retval = CORBA_OBJECT_NIL;
- }
-
- CORBA_exception_free (&env);
-
- return retval;
-}
-
-static const char* mate_panel_applet_frame_get_orient_string(MatePanelAppletFrame* frame, MatePanelAppletFrameActivating* frame_act)
-{
- PanelOrientation orientation;
- const char* retval = NULL;
-
- orientation = mate_panel_applet_frame_activating_get_orientation(frame_act);
-
- switch (orientation)
- {
- case PANEL_ORIENTATION_TOP:
- retval = "down";
- break;
- case PANEL_ORIENTATION_BOTTOM:
- retval = "up";
- break;
- case PANEL_ORIENTATION_LEFT:
- retval = "right";
- break;
- case PANEL_ORIENTATION_RIGHT:
- retval = "left";
- break;
- default:
- g_assert_not_reached();
- break;
- }
-
- return retval;
-}
-
-static const char* mate_panel_applet_frame_get_size_string (MatePanelAppletFrame* frame, MatePanelAppletFrameActivating* frame_act)
-{
- const char* retval = NULL;
- guint32 size;
-
- size = mate_panel_applet_frame_activating_get_size(frame_act);
-
- if (size <= PANEL_SIZE_XX_SMALL)
- {
- retval = "xx-small";
- }
- else if (size <= PANEL_SIZE_X_SMALL)
- {
- retval = "x-small";
- }
- else if (size <= PANEL_SIZE_SMALL)
- {
- retval = "small";
- }
- else if (size <= PANEL_SIZE_MEDIUM)
- {
- retval = "medium";
- }
- else if (size <= PANEL_SIZE_LARGE)
- {
- retval = "large";
- }
- else if (size <= PANEL_SIZE_X_LARGE)
- {
- retval = "x-large";
- }
- else
- {
- retval = "xx-large";
- }
-
- return retval;
-}
-
-static char *
-mate_panel_applet_frame_construct_item (MatePanelAppletFrame *frame,
- MatePanelAppletFrameActivating *frame_act)
-{
- char *retval;
- char *conf_path = NULL;
- char *bg_str = NULL;
- gboolean locked_down;
-
- conf_path = mate_panel_applet_frame_activating_get_conf_path (frame_act);
- //FIXME vuntz
-#if 0
- bg_str = _mate_panel_applet_frame_get_background_string (
- frame, panel, panel->background.type);
-#endif
-
- if (bg_str == NULL)
- bg_str = g_strdup ("");
-
- locked_down = mate_panel_applet_frame_activating_get_locked_down (frame_act);
-
- retval = g_strdup_printf (
- "prefs_key=%s;"
- "background=%s;orient=%s;size=%s;locked_down=%s",
- conf_path, bg_str,
- mate_panel_applet_frame_get_orient_string (frame, frame_act),
- mate_panel_applet_frame_get_size_string (frame, frame_act),
- locked_down ? "true" : "false");
-
- g_free (conf_path);
- g_free (bg_str);
-
- return retval;
-}
-
-static void
-mate_panel_applet_frame_event_listener (MateComponentListener *listener,
- const char *event,
- const CORBA_any *any,
- CORBA_Environment *ev,
- MatePanelAppletFrame *frame)
-{
- if (!strcmp (event, "MateComponent/Property:change:" PROPERTY_FLAGS))
- mate_panel_applet_frame_matecomponent_update_flags (frame, any);
-
- else if (!strcmp (event, "MateComponent/Property:change:" PROPERTY_SIZE_HINTS))
- mate_panel_applet_frame_matecomponent_update_size_hints (frame, any);
-}
-
-static void
-mate_panel_applet_frame_matecomponent_activated (CORBA_Object object,
- const char *error_reason,
- gpointer data)
-{
- MatePanelAppletFrameActivating *frame_act;
- MatePanelAppletFrameMateComponent *matecomponent_frame;
- MatePanelAppletFrame *frame;
- GtkWidget *widget;
- MateComponentControlFrame *control_frame;
- MateComponent_Control control;
- MateComponent_ItemContainer container;
- CORBA_Environment corba_ev;
- AppletInfo *info;
- char *error;
- char *item_name;
- GError *gerror = NULL;
-
- widget = NULL;
- matecomponent_frame = MATE_PANEL_APPLET_FRAME_MATECOMPONENT (data);
- frame = MATE_PANEL_APPLET_FRAME (data);
- frame_act = g_object_get_data (G_OBJECT (frame), "mate-panel-applet-frame-activating");
- g_object_set_data (G_OBJECT (frame), "mate-panel-applet-frame-activating", NULL);
-
- /* according to the source of matecomponent control == NULL && no
- exception can happen, so handle it */
- if (error_reason != NULL || object == CORBA_OBJECT_NIL) {
- gerror = g_error_new_literal (mate_panel_applet_frame_matecomponent_error_quark (), 0, error_reason);
- goto error_out;
- }
-
- CORBA_exception_init (&corba_ev);
-
- item_name = mate_panel_applet_frame_construct_item (frame,
- frame_act);
-
- matecomponent_frame->priv->control = CORBA_OBJECT_NIL;
- container = MateComponent_Unknown_queryInterface (object,
- "IDL:MateComponent/ItemContainer:1.0",
- &corba_ev);
- if (!MATECOMPONENT_EX (&corba_ev) && container != CORBA_OBJECT_NIL) {
- MateComponent_Unknown containee;
-
- containee = MateComponent_ItemContainer_getObjectByName (container,
- item_name,
- TRUE,
- &corba_ev);
- matecomponent_object_release_unref (container, NULL);
-
- if (!MATECOMPONENT_EX (&corba_ev) && containee != CORBA_OBJECT_NIL) {
- matecomponent_frame->priv->control =
- MateComponent_Unknown_queryInterface (containee,
- "IDL:MateComponent/Control:1.0",
- &corba_ev);
-
- matecomponent_object_release_unref (containee, NULL);
- }
- }
- g_free (item_name);
-
- if (matecomponent_frame->priv->control == CORBA_OBJECT_NIL) {
- error = matecomponent_exception_get_text (&corba_ev);
- gerror = g_error_new (mate_panel_applet_frame_matecomponent_error_quark (), 0, "failed to get MateComponent/Control interface:\n", error);
- CORBA_exception_free (&corba_ev);
- matecomponent_object_release_unref (object, NULL);
- g_free (error);
- goto error_out;
- }
-
- widget = matecomponent_widget_new_control_from_objref (matecomponent_frame->priv->control,
- CORBA_OBJECT_NIL);
-
- CORBA_exception_free (&corba_ev);
- matecomponent_object_release_unref (object, NULL);
-
- if (!widget) {
- gerror = g_error_new_literal (mate_panel_applet_frame_matecomponent_error_quark (), 0, "no widget created");
- goto error_out;
- }
-
- control_frame = matecomponent_widget_get_control_frame (MATECOMPONENT_WIDGET (widget));
- if (control_frame == NULL) {
- gerror = g_error_new_literal (mate_panel_applet_frame_matecomponent_error_quark (), 0, "cannot get control frame");
- goto error_out;
- }
-
- matecomponent_frame->priv->property_bag =
- matecomponent_control_frame_get_control_property_bag (control_frame,
- &corba_ev);
- if (matecomponent_frame->priv->property_bag == NULL || MATECOMPONENT_EX (&corba_ev)) {
- error = matecomponent_exception_get_text (&corba_ev);
- CORBA_exception_free (&corba_ev);
- gerror = g_error_new (mate_panel_applet_frame_matecomponent_error_quark (), 0, "cannot get property bag frame:\n%s", error);
- g_free (error);
- goto error_out;
- }
-
- matecomponent_event_source_client_add_listener (matecomponent_frame->priv->property_bag,
- (MateComponentListenerCallbackFn) mate_panel_applet_frame_event_listener,
- "MateComponent/Property:change:mate-panel-applet",
- NULL,
- frame);
-
- matecomponent_frame->priv->ui_component =
- matecomponent_control_frame_get_popup_component (control_frame,
- &corba_ev);
- if (matecomponent_frame->priv->ui_component == NULL || MATECOMPONENT_EX (&corba_ev)) {
- error = matecomponent_exception_get_text (&corba_ev);
- CORBA_exception_free (&corba_ev);
- gerror = g_error_new (mate_panel_applet_frame_matecomponent_error_quark (), 0, "cannot get popup component:\n%s", error);
- g_free (error);
- goto error_out;
- }
-
- matecomponent_ui_util_set_ui (matecomponent_frame->priv->ui_component, DATADIR,
- "MATE_Panel_Popup.xml", "panel", NULL);
-
- matecomponent_ui_component_add_listener (matecomponent_frame->priv->ui_component,
- "LockAppletToPanel",
- listener_popup_handle_lock,
- frame);
-
- matecomponent_ui_component_add_verb_list_with_data (
- matecomponent_frame->priv->ui_component, popup_verbs, frame);
-
- control = matecomponent_control_frame_get_control (control_frame);
- if (!control) {
- CORBA_exception_free (&corba_ev);
- gerror = g_error_new_literal (mate_panel_applet_frame_matecomponent_error_quark (), 0, "cannot get control");
- goto error_out;
- }
-
- matecomponent_frame->priv->applet_shell = mate_panel_applet_frame_get_applet_shell (control);
- if (matecomponent_frame->priv->applet_shell == CORBA_OBJECT_NIL) {
- CORBA_exception_free (&corba_ev);
- gerror = g_error_new_literal (mate_panel_applet_frame_matecomponent_error_quark (), 0, "cannot get applet shell");
- goto error_out;
- }
-
- CORBA_exception_free (&corba_ev);
-
- MateCORBA_small_listen_for_broken (object,
- G_CALLBACK (mate_panel_applet_frame_matecomponent_applet_broken),
- frame);
-
- gtk_container_add (GTK_CONTAINER (frame), widget);
-
- goto out;
-
-error_out:
- if (widget)
- g_object_unref (widget);
- if (!gerror)
- gerror = g_error_new_literal (mate_panel_applet_frame_matecomponent_error_quark (), 0, "unknown error");
-
-out:
- _mate_panel_applet_frame_activated (frame, frame_act, gerror);
-}
-
-gboolean
-mate_panel_applet_frame_matecomponent_load (const gchar *iid,
- MatePanelAppletFrameActivating *frame_act)
-{
- MatePanelAppletFrameMateComponent *matecomponent_frame;
- MatePanelAppletFrame *frame;
- CORBA_Environment ev;
-
- g_return_val_if_fail (iid != NULL, FALSE);
- g_return_val_if_fail (frame_act != NULL, FALSE);
-
- if (!mate_panel_applets_manager_factory_activate (iid))
- return FALSE;
-
- matecomponent_frame = g_object_new (PANEL_TYPE_APPLET_FRAME_MATECOMPONENT, NULL);
- frame = MATE_PANEL_APPLET_FRAME (matecomponent_frame);
- _mate_panel_applet_frame_set_iid (frame, iid);
-
- g_object_set_data (G_OBJECT (frame), "mate-panel-applet-frame-activating", frame_act);
-
- CORBA_exception_init (&ev);
-
- matecomponent_activation_activate_from_id_async ((gchar *) iid, 0,
- (MateComponentActivationCallback) mate_panel_applet_frame_matecomponent_activated,
- frame, &ev);
-
- CORBA_exception_free (&ev);
-
- return TRUE;
-}