summaryrefslogtreecommitdiff
path: root/libwnck/pager.c
diff options
context:
space:
mode:
Diffstat (limited to 'libwnck/pager.c')
-rw-r--r--libwnck/pager.c106
1 files changed, 102 insertions, 4 deletions
diff --git a/libwnck/pager.c b/libwnck/pager.c
index 8561546..4df766c 100644
--- a/libwnck/pager.c
+++ b/libwnck/pager.c
@@ -91,6 +91,17 @@ struct _WnckPagerPrivate
guint dnd_time; /* time of last event during dnd (for delayed workspace activation) */
};
+enum
+{
+ PROP_0,
+
+ PROP_HANDLE,
+
+ LAST_PROP
+};
+
+static GParamSpec *pager_properties[LAST_PROP] = { NULL };
+
G_DEFINE_TYPE_WITH_PRIVATE (WnckPager, wnck_pager, GTK_TYPE_WIDGET);
enum
@@ -235,12 +246,75 @@ wnck_pager_init (WnckPager *pager)
}
static void
+wnck_pager_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ WnckPager *self;
+
+ self = WNCK_PAGER (object);
+
+ switch (property_id)
+ {
+ case PROP_HANDLE:
+ g_value_set_object (value, self->priv->handle);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+wnck_pager_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ WnckPager *self;
+
+ self = WNCK_PAGER (object);
+
+ switch (property_id)
+ {
+ case PROP_HANDLE:
+ g_assert (self->priv->handle == NULL);
+ self->priv->handle = g_value_dup_object (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+install_properties (GObjectClass *object_class)
+{
+ pager_properties[PROP_HANDLE] =
+ g_param_spec_object ("handle",
+ "handle",
+ "handle",
+ WNCK_TYPE_HANDLE,
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_READWRITE |
+ G_PARAM_EXPLICIT_NOTIFY |
+ G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (object_class, LAST_PROP, pager_properties);
+}
+
+static void
wnck_pager_class_init (WnckPagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->finalize = wnck_pager_finalize;
+ object_class->get_property = wnck_pager_get_property;
+ object_class->set_property = wnck_pager_set_property;
widget_class->realize = wnck_pager_realize;
widget_class->unrealize = wnck_pager_unrealize;
@@ -264,6 +338,8 @@ wnck_pager_class_init (WnckPagerClass *klass)
widget_class->drag_end = wnck_pager_drag_end;
widget_class->query_tooltip = wnck_pager_query_tooltip;
+ install_properties (object_class);
+
gtk_widget_class_set_css_name (widget_class, "wnck-pager");
}
@@ -303,8 +379,8 @@ _wnck_pager_set_screen (WnckPager *pager)
gdkscreen = gtk_widget_get_screen (GTK_WIDGET (pager));
screen_number = gdk_x11_screen_get_screen_number (gdkscreen);
- pager->priv->screen = _wnck_handle_get_screen (pager->priv->handle,
- screen_number);
+ pager->priv->screen = wnck_handle_get_screen (pager->priv->handle,
+ screen_number);
if (!wnck_pager_set_layout_hint (pager))
{
@@ -2201,12 +2277,34 @@ wnck_pager_new (void)
{
WnckPager *pager;
- pager = g_object_new (WNCK_TYPE_PAGER, NULL);
- pager->priv->handle = g_object_ref (_wnck_get_handle ());
+ pager = g_object_new (WNCK_TYPE_PAGER,
+ "handle", _wnck_get_handle (),
+ NULL);
return GTK_WIDGET (pager);
}
+/**
+ * wnck_pager_new_with_handle:
+ * @handle: a #WnckHandle
+ *
+ * Creates a new #WnckPager. The #WnckPager will show the #WnckWorkspace of the
+ * #WnckScreen it is on.
+ *
+ * Returns: a newly created #WnckPager.
+ */
+GtkWidget *
+wnck_pager_new_with_handle (WnckHandle *handle)
+{
+ WnckPager *self;
+
+ self = g_object_new (WNCK_TYPE_PAGER,
+ "handle", handle,
+ NULL);
+
+ return GTK_WIDGET (self);
+}
+
static gboolean
wnck_pager_set_layout_hint (WnckPager *pager)
{