aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/misc
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/misc')
-rw-r--r--widgets/misc/ChangeLog5
-rw-r--r--widgets/misc/Makefile.am2
-rw-r--r--widgets/misc/e-bonobo-widget.c195
-rw-r--r--widgets/misc/e-bonobo-widget.h75
4 files changed, 277 insertions, 0 deletions
diff --git a/widgets/misc/ChangeLog b/widgets/misc/ChangeLog
index e3017edf31..27f5be6337 100644
--- a/widgets/misc/ChangeLog
+++ b/widgets/misc/ChangeLog
@@ -1,3 +1,8 @@
+2001-08-08 Ettore Perazzoli <ettore@ximian.com>
+
+ * e-bonobo-widget.c: New.
+ * e-bonobo-widget.h: New.
+
2001-08-05 Ettore Perazzoli <ettore@ximian.com>
[Added an "Activate" button to the search bar.]
diff --git a/widgets/misc/Makefile.am b/widgets/misc/Makefile.am
index cca7625d05..f8d6246f5b 100644
--- a/widgets/misc/Makefile.am
+++ b/widgets/misc/Makefile.am
@@ -12,6 +12,8 @@ noinst_LIBRARIES = \
libemiscwidgets.a
libemiscwidgets_a_SOURCES = \
+ e-bonobo-widget.c \
+ e-bonobo-widget.h \
e-calendar.c \
e-calendar.h \
e-calendar-item.c \
diff --git a/widgets/misc/e-bonobo-widget.c b/widgets/misc/e-bonobo-widget.c
new file mode 100644
index 0000000000..d584067c7e
--- /dev/null
+++ b/widgets/misc/e-bonobo-widget.c
@@ -0,0 +1,195 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/* e-bonobo-widget.c
+ *
+ * Copyright (C) 2001 Ximian, Inc.
+ *
+ * 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:
+ * Michael Meeks <michael@ximian.com>
+ * Ettore Perazzoli <ettore@ximian.com>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "e-bonobo-widget.h"
+
+#include <gal/util/e-util.h>
+
+#include <gdk/gdkprivate.h>
+#include <gdk/gdkx.h>
+#include <gdk/gdktypes.h>
+
+
+#define PARENT_TYPE bonobo_widget_get_type ()
+static BonoboWidgetClass *parent_class = NULL;
+
+
+static void
+class_init (GtkObjectClass *object_class)
+{
+ parent_class = gtk_type_class (PARENT_TYPE);
+
+ /* No method to override. */
+}
+
+static void
+init (EBonoboWidget *bonobo_widget)
+{
+ /* Nothing to initialize. */
+}
+
+
+static void
+evolution_toplevel_property_get_fn (BonoboPropertyBag *bag,
+ BonoboArg *arg,
+ unsigned int arg_id,
+ CORBA_Environment *ev,
+ void *data)
+{
+ BonoboControlFrame *frame;
+ GtkWidget *toplevel;
+ char *id;
+
+ frame = BONOBO_CONTROL_FRAME (data);
+
+ toplevel = bonobo_control_frame_get_widget (frame);
+ while (toplevel->parent != NULL)
+ toplevel = toplevel->parent;
+
+ if (BONOBO_IS_CONTROL (toplevel)) {
+ Bonobo_PropertyBag toplevel_property_bag;
+
+ toplevel_property_bag = bonobo_control_get_ambient_properties (BONOBO_CONTROL (toplevel), NULL);
+ if (toplevel_property_bag == CORBA_OBJECT_NIL)
+ goto error;
+
+ id = bonobo_property_bag_client_get_value_string (toplevel_property_bag,
+ E_BONOBO_WIDGET_TOPLEVEL_PROPERTY_ID,
+ NULL);
+ if (id == NULL)
+ goto error;
+
+ *(char **)arg->_value = id;
+ return;
+ }
+
+ id = bonobo_control_windowid_from_x11 (GDK_WINDOW_XWINDOW (toplevel->window));
+ *(char **)arg->_value = CORBA_string_dup (id);
+ g_free (id);
+
+ return;
+
+ error:
+ /* FIXME: exception? */
+ *(char **)arg->_value = CORBA_string_dup ("");
+}
+
+static void
+setup_toplevel_property (EBonoboWidget *widget)
+{
+ BonoboPropertyBag *property_bag;
+ BonoboControlFrame *control_frame;
+
+ control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (widget));
+
+ if (!(property_bag = bonobo_control_frame_get_propbag (control_frame))) {
+ property_bag = bonobo_property_bag_new (NULL, NULL, NULL);
+ bonobo_control_frame_set_propbag (control_frame, property_bag);
+ }
+
+ /* FIXME: Kill property bag when the frame dies. */
+
+ bonobo_property_bag_add_full (property_bag, E_BONOBO_WIDGET_TOPLEVEL_PROPERTY_ID, 0,
+ TC_Bonobo_Control_windowId,
+ NULL, "Toplevel Window ID",
+ BONOBO_PROPERTY_READABLE,
+ evolution_toplevel_property_get_fn, NULL,
+ control_frame);
+}
+
+
+EBonoboWidget *
+e_bonobo_widget_construct_control_from_objref (EBonoboWidget *widget,
+ Bonobo_Control control,
+ Bonobo_UIContainer uic)
+{
+ g_return_val_if_fail (widget != NULL, NULL);
+ g_return_val_if_fail (E_IS_BONOBO_WIDGET (widget), NULL);
+
+ if (bonobo_widget_construct_control_from_objref (BONOBO_WIDGET (widget), control, uic) == NULL)
+ return NULL;
+
+ setup_toplevel_property (widget);
+ return widget;
+}
+
+EBonoboWidget *
+e_bonobo_widget_construct_control (EBonoboWidget *widget,
+ const char *moniker,
+ Bonobo_UIContainer uic)
+{
+ g_return_val_if_fail (widget != NULL, NULL);
+ g_return_val_if_fail (E_IS_BONOBO_WIDGET (widget), NULL);
+ g_return_val_if_fail (moniker != NULL, NULL);
+
+ if (bonobo_widget_construct_control (BONOBO_WIDGET (widget), moniker, uic) == NULL)
+ return NULL;
+
+ setup_toplevel_property (widget);
+
+ return widget;
+}
+
+
+GtkWidget *
+e_bonobo_widget_new_control (const char *moniker,
+ Bonobo_UIContainer uic)
+{
+ EBonoboWidget *widget;
+
+ g_return_val_if_fail (moniker != NULL, NULL);
+
+ widget = gtk_type_new (e_bonobo_widget_get_type ());
+ widget = e_bonobo_widget_construct_control (widget, moniker, uic);
+
+ if (widget == NULL)
+ return NULL;
+
+ return GTK_WIDGET (widget);
+}
+
+GtkWidget *
+e_bonobo_widget_new_control_from_objref (Bonobo_Control control,
+ Bonobo_UIContainer uic)
+{
+ EBonoboWidget *widget;
+
+ g_return_val_if_fail (control != CORBA_OBJECT_NIL, NULL);
+
+ widget = gtk_type_new (E_TYPE_BONOBO_WIDGET);
+
+ widget = e_bonobo_widget_construct_control_from_objref (widget, control, uic);
+ if (widget == NULL)
+ return NULL;
+
+ return GTK_WIDGET (widget);
+}
+
+
+E_MAKE_TYPE (e_bonobo_widget, "EBonoboWidget", EBonoboWidget, class_init, init, PARENT_TYPE)
diff --git a/widgets/misc/e-bonobo-widget.h b/widgets/misc/e-bonobo-widget.h
new file mode 100644
index 0000000000..fd045d699d
--- /dev/null
+++ b/widgets/misc/e-bonobo-widget.h
@@ -0,0 +1,75 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/* e-bonobo-widget.h
+ *
+ * Copyright (C) 2001 Ximian, Inc.
+ *
+ * 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.
+ *
+ * Author: Ettore Perazzoli <ettore@ximian.com>
+ */
+
+#ifndef _E_BONOBO_WIDGET_H_
+#define _E_BONOBO_WIDGET_H_
+
+#include <bonobo/bonobo-widget.h>
+
+#ifdef __cplusplus
+extern "C" {
+#pragma }
+#endif /* __cplusplus */
+
+#define E_TYPE_BONOBO_WIDGET (e_bonobo_widget_get_type ())
+#define E_BONOBO_WIDGET(obj) (GTK_CHECK_CAST ((obj), E_TYPE_BONOBO_WIDGET, EBonoboWidget))
+#define E_BONOBO_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_BONOBO_WIDGET, EBonoboWidgetClass))
+#define E_IS_BONOBO_WIDGET(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_BONOBO_WIDGET))
+#define E_IS_BONOBO_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_BONOBO_WIDGET))
+
+
+typedef struct _EBonoboWidget EBonoboWidget;
+typedef struct _EBonoboWidgetPrivate EBonoboWidgetPrivate;
+typedef struct _EBonoboWidgetClass EBonoboWidgetClass;
+
+struct _EBonoboWidget {
+ BonoboWidget parent;
+
+ EBonoboWidgetPrivate *priv;
+};
+
+struct _EBonoboWidgetClass {
+ BonoboWidgetClass parent_class;
+};
+
+
+#define E_BONOBO_WIDGET_TOPLEVEL_PROPERTY_ID "bonobo:toplevel"
+
+
+GtkType e_bonobo_widget_get_type (void);
+EBonoboWidget *e_bonobo_widget_construct_control_from_objref (EBonoboWidget *widget,
+ Bonobo_Control control,
+ Bonobo_UIContainer uic);
+EBonoboWidget *e_bonobo_widget_construct_control (EBonoboWidget *widget,
+ const char *moniker,
+ Bonobo_UIContainer uic);
+GtkWidget *e_bonobo_widget_new_control (const char *moniker,
+ Bonobo_UIContainer uic);
+GtkWidget *e_bonobo_widget_new_control_from_objref (Bonobo_Control control,
+ Bonobo_UIContainer uic);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _E_BONOBO_WIDGET_H_ */