summaryrefslogtreecommitdiff
path: root/libmdock/mdock-window.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmdock/mdock-window.c')
-rw-r--r--libmdock/mdock-window.c141
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);
+}