summaryrefslogtreecommitdiff
path: root/libmdock/mdock-widget.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmdock/mdock-widget.c')
-rw-r--r--libmdock/mdock-widget.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/libmdock/mdock-widget.c b/libmdock/mdock-widget.c
index cdb942e..6507fbb 100644
--- a/libmdock/mdock-widget.c
+++ b/libmdock/mdock-widget.c
@@ -33,6 +33,7 @@
#include <zeitgeist.h>
#endif
+#define POPUP_MOVE_TIMEOUT 100
#define POPUP_SHOW_TIMEOUT 200
#define POPUP_HIDE_TIMEOUT 500
@@ -413,7 +414,8 @@ static gboolean handle_popup_timer(gpointer user_data)
MDockWidget *self = MDOCK_WIDGET(user_data);
if (self->priv->current_popup_item) {
hide_item_popup(self);
- } else if (self->priv->current_pointed_item) {
+ }
+ if (self->priv->current_pointed_item) {
show_item_popup(self, self->priv->current_pointed_item);
}
@@ -423,16 +425,14 @@ static gboolean handle_popup_timer(gpointer user_data)
static gboolean handle_item_enter(MDockWidget *self, GdkEventCrossing *event, MDockItem *item)
{
- g_debug("Item enter");
+ g_warn_if_fail(!self->priv->current_pointed_item);
self->priv->current_pointed_item = item;
if (self->priv->current_popup_item) {
if (self->priv->popup_timer) {
g_source_remove(self->priv->popup_timer);
self->priv->popup_timer = 0;
}
- hide_item_popup(self);
- show_item_popup(self, item);
-
+ self->priv->popup_timer = g_timeout_add(POPUP_MOVE_TIMEOUT, handle_popup_timer, self);
} else if (!self->priv->popup_timer) {
self->priv->popup_timer = g_timeout_add(POPUP_SHOW_TIMEOUT, handle_popup_timer, self);
}
@@ -441,7 +441,6 @@ static gboolean handle_item_enter(MDockWidget *self, GdkEventCrossing *event, MD
static gboolean handle_item_leave(MDockWidget *self, GdkEventCrossing *event, MDockItem *item)
{
- g_debug("Item leave");
g_warn_if_fail(self->priv->current_pointed_item == item);
g_warn_if_fail(!self->priv->current_popup_item || self->priv->current_pointed_item == item);
self->priv->current_pointed_item = NULL;
@@ -454,7 +453,7 @@ static gboolean handle_item_leave(MDockWidget *self, GdkEventCrossing *event, MD
static gboolean handle_item_selector_enter(MDockWidget *self, GdkEventCrossing *event, MDockItemWindowSelector *selector)
{
g_debug("Item selector enter %d", event->detail);
- if (event->detail != GDK_NOTIFY_NONLINEAR) return FALSE;
+ if (event->detail == GDK_NOTIFY_INFERIOR) return FALSE;
g_warn_if_fail(self->priv->current_popup_item);
if (self->priv->popup_timer) {
g_source_remove(self->priv->popup_timer);
@@ -466,7 +465,7 @@ static gboolean handle_item_selector_enter(MDockWidget *self, GdkEventCrossing *
static gboolean handle_item_selector_leave(MDockWidget *self, GdkEventCrossing *event, MDockItemWindowSelector *selector)
{
g_debug("Item selector leave %d", event->detail);
- if (event->detail != GDK_NOTIFY_NONLINEAR) return FALSE;
+ if (event->detail == GDK_NOTIFY_INFERIOR) return FALSE;
g_warn_if_fail(self->priv->current_popup_item);
if (!self->priv->popup_timer) {
self->priv->popup_timer = g_timeout_add(POPUP_HIDE_TIMEOUT, handle_popup_timer, self);
@@ -815,7 +814,17 @@ static void mdock_widget_class_init(MDockWidgetClass *klass)
g_type_class_add_private(klass, sizeof(MDockWidgetPrivate));
}
+gint mdock_widget_get_n_items(MDockWidget *self)
+{
+ return g_sequence_get_length(self->priv->items);
+}
+
GtkWidget *mdock_widget_new(void)
{
return GTK_WIDGET(g_object_new(MDOCK_TYPE_WIDGET, NULL));
}
+
+GtkWidget *mdock_widget_new_with_settings_path(const gchar *path)
+{
+ return GTK_WIDGET(g_object_new(MDOCK_TYPE_WIDGET, "settings-path", path, NULL));
+}