diff options
Diffstat (limited to 'libmdock/mdock-window.c')
-rw-r--r-- | libmdock/mdock-window.c | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/libmdock/mdock-window.c b/libmdock/mdock-window.c new file mode 100644 index 0000000..5707cf5 --- /dev/null +++ b/libmdock/mdock-window.c @@ -0,0 +1,141 @@ +#include "mdock-window.h" +#include "thumbnailer.h" + +#define MDOCK_WINDOW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), MDOCK_TYPE_WINDOW, MDockWindowPrivate)) + +struct _MDockWindowPrivate +{ + GtkImage *icon; + GtkLabel *title; + GtkWidget *close_btn; + GtkImage *img; +}; + +G_DEFINE_TYPE(MDockWindow, mdock_window, GTK_TYPE_TABLE) + +enum MDockItemWindowSelectorProperties { + PROP_0, + PROP_WINDOW, + N_PROPERTIES +}; + +static GParamSpec *obj_properties[N_PROPERTIES] = { NULL }; + +static void handle_close_btn_clicked(MDockWindow *self, GtkToolButton *toolbtn) +{ + wnck_window_close(self->window, gtk_get_current_event_time()); +} + +static void mdock_window_set_property(GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + MDockWindow *self = MDOCK_WINDOW(object); + switch (property_id) { + case PROP_WINDOW: + self->window = g_value_get_object(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); + break; + } +} + +static void mdock_window_get_property(GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + MDockWindow *self = MDOCK_WINDOW(object); + switch (property_id) { + case PROP_WINDOW: + g_value_set_object(value, self->window); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); + break; + } +} + +static void mdock_window_constructed(GObject *object) +{ + MDockWindow *self = MDOCK_WINDOW(object); + G_OBJECT_CLASS(mdock_window_parent_class)->constructed(object); + thumbnailer_enable_for_window(self->window); + + gtk_table_resize(GTK_TABLE(self), 2, 3); + + self->priv->icon = GTK_IMAGE(gtk_image_new_from_pixbuf(wnck_window_get_icon(self->window))); + gtk_table_attach(GTK_TABLE(self), GTK_WIDGET(self->priv->icon), + 0, 1, 0, 1, 0, 0, 0, 0); + gtk_widget_show(GTK_WIDGET(self->priv->icon)); + + self->priv->title = GTK_LABEL(gtk_label_new(wnck_window_get_name(self->window))); + gtk_label_set_max_width_chars(self->priv->title, 20); + gtk_table_attach(GTK_TABLE(self), GTK_WIDGET(self->priv->title), + 1, 2, 0, 1, GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_FILL, 0, 0); + gtk_widget_show(GTK_WIDGET(self->priv->title)); + + self->priv->close_btn = GTK_WIDGET(gtk_tool_button_new_from_stock(GTK_STOCK_CLOSE)); + gtk_table_attach(GTK_TABLE(self), self->priv->close_btn, + 2, 3, 0, 1, 0, 0, 0, 0); + if (wnck_window_get_actions(self->window) & WNCK_WINDOW_ACTION_CLOSE) { + gtk_widget_show(self->priv->close_btn); + g_signal_connect_swapped(self->priv->close_btn, "clicked", + G_CALLBACK(handle_close_btn_clicked), self); + } + + self->priv->img = GTK_IMAGE(gtk_image_new()); + gtk_table_attach(GTK_TABLE(self), GTK_WIDGET(self->priv->img), + 0, 3, 1, 2, GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0); + gtk_widget_show(GTK_WIDGET(self->priv->img)); +} + +static void mdock_window_dispose(GObject *object) +{ + G_OBJECT_CLASS(mdock_window_parent_class)->dispose(object); +} + +static void mdock_window_finalize(GObject *object) +{ + G_OBJECT_CLASS(mdock_window_parent_class)->finalize(object); +} + +static void mdock_window_class_init (MDockWindowClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS (klass); + obj_class->set_property = mdock_window_set_property; + obj_class->get_property = mdock_window_get_property; + obj_class->constructed = mdock_window_constructed; + obj_class->dispose = mdock_window_dispose; + obj_class->finalize = mdock_window_finalize; + + g_type_class_add_private(obj_class, sizeof (MDockWindowPrivate)); + + obj_properties[PROP_WINDOW] = g_param_spec_object("window", + "The WnckWindow corresponding to this window", + "Set the WnckWindow the options in this menu apply to", + WNCK_TYPE_WINDOW, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties(obj_class, N_PROPERTIES, obj_properties); +} + +static void mdock_window_init(MDockWindow *self) +{ + self->priv = MDOCK_WINDOW_GET_PRIVATE(self); +} + +void mdock_window_update_screenshot(MDockWindow *self) +{ + g_return_if_fail(self->window); + thumbnailer_update_thumbnail(self->window); + gtk_image_set_from_pixmap(self->priv->img, + thumbnailer_get_thumbnail(self->window), NULL); +} + +MDockWindow *mdock_window_new(WnckWindow *window) +{ + return g_object_new(MDOCK_TYPE_WINDOW, "window", window, NULL); +} |