diff options
author | Javier <dev.git@javispedro.com> | 2015-01-19 00:07:22 +0100 |
---|---|---|
committer | Javier <dev.git@javispedro.com> | 2015-01-19 00:07:22 +0100 |
commit | cd89c60570d17cad28928f3495eded7af2b45431 (patch) | |
tree | a7d13d4f0d63e852062964fcf79ca9d5ad70ae15 /libmdock/mdock-widget.c | |
parent | a215500011290121925cfe929d71b80696732230 (diff) | |
download | mdock-cd89c60570d17cad28928f3495eded7af2b45431.tar.gz mdock-cd89c60570d17cad28928f3495eded7af2b45431.zip |
initially app-id support
Diffstat (limited to 'libmdock/mdock-widget.c')
-rw-r--r-- | libmdock/mdock-widget.c | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/libmdock/mdock-widget.c b/libmdock/mdock-widget.c index e69de29..8da6869 100644 --- a/libmdock/mdock-widget.c +++ b/libmdock/mdock-widget.c @@ -0,0 +1,103 @@ +/* + * Copyright 2015 Javier S. Pedro <dev.git@javispedro.com> + * + * This file is part of MDock. + * + * MDock 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 3 of the License, or + * (at your option) any later version. + * + * MDock 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MDock. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <gtk/gtk.h> + +#define WNCK_I_KNOW_THIS_IS_UNSTABLE 1 +#include <libwnck/libwnck.h> + +#include "mdock-widget.h" +#include "mdock-item.h" +#include "matcher.h" + +struct _MDockWidgetPrivate +{ + WnckScreen *wnck_screen; + GSequence *groups; +}; + +G_DEFINE_TYPE(MDockWidget, mdock_widget, GTK_TYPE_BOX) + +#define MDOCK_WIDGET_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), MDOCK_TYPE_WIDGET, MDockWidgetPrivate)) + +static void handle_active_window_changed(MDockWidget *self, WnckWindow *previous_window, WnckScreen *screen) +{ + +} + +static void handle_window_closed(MDockWidget *self, WnckWindow *window, WnckScreen *screen) +{ + +} + +static void handle_window_opened(MDockWidget *self, WnckWindow *window, WnckScreen *screen) +{ + g_debug("Window opened: %s", wnck_window_get_name(window)); + AppId *appid = app_id_from_window(window); + g_debug("%s %d %s %s %s", appid->host, appid->uid, appid->executable, appid->wm_class_class, appid->wm_class_name); +} + +static void mdock_widget_dispose(GObject *obj) +{ + MDockWidget *self = MDOCK_WIDGET(obj); + if (self->priv->wnck_screen) { + g_signal_handlers_disconnect_by_data(self->priv->wnck_screen, self); + self->priv->wnck_screen = NULL; + } + G_OBJECT_CLASS(mdock_widget_parent_class)->dispose(obj); +} + +static void mdock_widget_class_init(MDockWidgetClass *klass) +{ + // GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); + + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + obj_class->dispose = mdock_widget_dispose; + + g_type_class_add_private(klass, sizeof(MDockWidgetPrivate)); +} + +static void mdock_widget_init(MDockWidget *self) +{ + self->priv = MDOCK_WIDGET_GET_PRIVATE(self); + + self->priv->wnck_screen = wnck_screen_get_default(); + g_signal_connect_object(self->priv->wnck_screen, "active-window-changed", + G_CALLBACK(handle_active_window_changed), self, G_CONNECT_SWAPPED); + g_signal_connect_object(self->priv->wnck_screen, "window-closed", + G_CALLBACK(handle_window_closed), self, G_CONNECT_SWAPPED); + g_signal_connect_object(self->priv->wnck_screen, "window-opened", + G_CALLBACK(handle_window_opened), self, G_CONNECT_SWAPPED); + + self->priv->groups = g_sequence_new(NULL); + + g_debug("widget init"); + + GList *windows = wnck_screen_get_windows_stacked(self->priv->wnck_screen); + for (GList *l = g_list_first(windows); l; l = g_list_next(l)) { + g_debug("list"); + WnckWindow *window = l->data; + handle_window_opened(self, window, self->priv->wnck_screen); + } +} + +GtkWidget *mdock_widget_new(void) +{ + return GTK_WIDGET(g_object_new(MDOCK_TYPE_WIDGET, NULL)); +} |