[gnome-flashback] common: add GfPopupWindow
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] common: add GfPopupWindow
- Date: Thu, 24 Sep 2015 20:08:33 +0000 (UTC)
commit a0134c70a73db603075b248d31782816dd1d6b3a
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Thu Sep 24 01:47:31 2015 +0300
common: add GfPopupWindow
gnome-flashback/libcommon/Makefile.am | 2 +
gnome-flashback/libcommon/gf-popup-window.c | 246 +++++++++++++++++++++
gnome-flashback/libcommon/gf-popup-window.h | 39 ++++
gnome-flashback/libshell/flashback-label-window.c | 159 ++------------
gnome-flashback/libshell/flashback-label-window.h | 4 +-
gnome-flashback/libshell/flashback-osd-window.c | 142 ++-----------
gnome-flashback/libshell/flashback-osd-window.h | 4 +-
7 files changed, 321 insertions(+), 275 deletions(-)
---
diff --git a/gnome-flashback/libcommon/Makefile.am b/gnome-flashback/libcommon/Makefile.am
index 121f87b..583c6a4 100644
--- a/gnome-flashback/libcommon/Makefile.am
+++ b/gnome-flashback/libcommon/Makefile.am
@@ -14,6 +14,8 @@ libcommon_la_CFLAGS = \
libcommon_la_SOURCES = \
gf-keybindings.c \
gf-keybindings.h \
+ gf-popup-window.c \
+ gf-popup-window.h \
$(NULL)
libcommon_la_LDFLAGS = \
diff --git a/gnome-flashback/libcommon/gf-popup-window.c b/gnome-flashback/libcommon/gf-popup-window.c
new file mode 100644
index 0000000..ce0fdeb
--- /dev/null
+++ b/gnome-flashback/libcommon/gf-popup-window.c
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2015 Alberts Muktupāvels
+ *
+ * This program 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.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include "gf-popup-window.h"
+
+typedef struct _GfPopupWindowPrivate GfPopupWindowPrivate;
+struct _GfPopupWindowPrivate
+{
+ guint fade_id;
+};
+
+enum
+{
+ SIGNAL_FADE_FINISHED,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE_WITH_PRIVATE (GfPopupWindow, gf_popup_window, GTK_TYPE_WINDOW)
+
+static gboolean
+fade_out_cb (gpointer user_data)
+{
+ GfPopupWindow *window;
+ GfPopupWindowPrivate *priv;
+ GtkWidget *widget;
+ gdouble opacity;
+
+ window = GF_POPUP_WINDOW (user_data);
+ priv = gf_popup_window_get_instance_private (window);
+ widget = GTK_WIDGET (window);
+ opacity = gtk_widget_get_opacity (widget);
+
+ opacity -= 0.02;
+ if (opacity <= 0.00)
+ {
+ gtk_widget_set_opacity (widget, 1.0);
+
+ g_signal_emit (window, signals[SIGNAL_FADE_FINISHED], 0);
+
+ priv->fade_id = 0;
+
+ return G_SOURCE_REMOVE;
+ }
+
+ gtk_widget_set_opacity (widget, opacity);
+ gtk_widget_queue_draw (widget);
+
+ return G_SOURCE_CONTINUE;
+}
+
+static void
+gf_popup_window_finalize (GObject *object)
+{
+ GfPopupWindow *window;
+ GfPopupWindowPrivate *priv;
+
+ window = GF_POPUP_WINDOW (object);
+ priv = gf_popup_window_get_instance_private (window);
+
+ if (priv->fade_id > 0)
+ {
+ g_source_remove (priv->fade_id);
+ priv->fade_id = 0;
+ }
+
+ G_OBJECT_CLASS (gf_popup_window_parent_class)->finalize (object);
+}
+
+static cairo_surface_t *
+get_background_surface (GtkWidget *widget,
+ cairo_t *cr,
+ gint width,
+ gint height)
+{
+ cairo_surface_t *surface;
+ cairo_t *cr_local;
+ GtkStyleContext *context;
+
+ surface = cairo_surface_create_similar (cairo_get_target (cr),
+ CAIRO_CONTENT_COLOR_ALPHA,
+ width, height);
+
+ if (cairo_surface_status (surface) != CAIRO_STATUS_SUCCESS)
+ {
+ if (surface)
+ cairo_surface_destroy (surface);
+
+ return NULL;
+ }
+
+ cr_local = cairo_create (surface);
+
+ if (cairo_status (cr_local) != CAIRO_STATUS_SUCCESS)
+ {
+ cairo_surface_destroy (surface);
+
+ if (cr_local)
+ cairo_destroy (cr_local);
+
+ return NULL;
+ }
+
+ context = gtk_widget_get_style_context (widget);
+
+ gtk_render_background (context, cr_local, 0, 0, width, height);
+ gtk_render_frame (context, cr_local, 0, 0, width, height);
+
+ cairo_destroy (cr_local);
+
+ return surface;
+}
+
+static gboolean
+gf_popup_window_draw (GtkWidget *widget,
+ cairo_t *cr)
+{
+ gint width;
+ gint height;
+ cairo_surface_t *surface;
+
+ width = gtk_widget_get_allocated_width (widget);
+ height = gtk_widget_get_allocated_height (widget);
+ surface = get_background_surface (widget, cr, width, height);
+
+ if (surface == NULL)
+ return TRUE;
+
+ cairo_rectangle (cr, 0, 0, width, height);
+ cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.0);
+ cairo_fill (cr);
+
+ cairo_set_source_surface (cr, surface, 0, 0);
+ cairo_paint (cr);
+
+ cairo_surface_destroy (surface);
+
+ return GTK_WIDGET_CLASS (gf_popup_window_parent_class)->draw (widget, cr);
+}
+
+static void
+gf_popup_window_realize (GtkWidget *widget)
+{
+ GdkScreen *screen;
+ GdkVisual *visual;
+
+ screen = gtk_widget_get_screen (widget);
+ visual = gdk_screen_get_rgba_visual (screen);
+
+ if (visual == NULL)
+ visual = gdk_screen_get_system_visual (screen);
+
+ gtk_widget_set_visual (widget, visual);
+
+ GTK_WIDGET_CLASS (gf_popup_window_parent_class)->realize (widget);
+}
+
+static void
+gf_popup_window_class_init (GfPopupWindowClass *window_class)
+{
+ GObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+
+ object_class = G_OBJECT_CLASS (window_class);
+ widget_class = GTK_WIDGET_CLASS (window_class);
+
+ object_class->finalize = gf_popup_window_finalize;
+
+ widget_class->draw = gf_popup_window_draw;
+ widget_class->realize = gf_popup_window_realize;
+
+ signals[SIGNAL_FADE_FINISHED] =
+ g_signal_new ("fade-finished", G_OBJECT_CLASS_TYPE (window_class),
+ G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0);
+}
+
+static void
+gf_popup_window_init (GfPopupWindow *window)
+{
+ GtkWindow *gtk_window;
+ GtkWidget *widget;
+
+ gtk_window = GTK_WINDOW (window);
+ widget = GTK_WIDGET (window);
+
+ gtk_window_set_decorated (gtk_window, FALSE);
+ gtk_window_set_focus_on_map (gtk_window, FALSE);
+ gtk_window_set_type_hint (gtk_window, GDK_WINDOW_TYPE_HINT_NOTIFICATION);
+ gtk_window_set_skip_pager_hint (gtk_window, TRUE);;
+ gtk_window_set_skip_taskbar_hint (gtk_window, TRUE);
+
+ gtk_widget_set_app_paintable (widget, TRUE);
+}
+
+void
+gf_popup_window_fade_start (GfPopupWindow *window)
+{
+ GfPopupWindowPrivate *priv;
+ GtkWidget *widget;
+
+ priv = gf_popup_window_get_instance_private (window);
+ widget = GTK_WIDGET (window);
+
+ if (priv->fade_id != 0)
+ g_source_remove (priv->fade_id);
+
+ gtk_widget_set_opacity (widget, 1.0);
+
+ priv->fade_id = g_timeout_add (10, fade_out_cb, window);
+ g_source_set_name_by_id (priv->fade_id, "[gnome-flashback] fade_out_cb");
+}
+
+void
+gf_popup_window_fade_cancel (GfPopupWindow *window)
+{
+ GfPopupWindowPrivate *priv;
+ GtkWidget *widget;
+
+ priv = gf_popup_window_get_instance_private (window);
+ widget = GTK_WIDGET (window);
+
+ if (priv->fade_id != 0)
+ {
+ g_source_remove (priv->fade_id);
+ priv->fade_id = 0;
+ }
+
+ gtk_widget_set_opacity (widget, 1.0);
+}
diff --git a/gnome-flashback/libcommon/gf-popup-window.h b/gnome-flashback/libcommon/gf-popup-window.h
new file mode 100644
index 0000000..4958d87
--- /dev/null
+++ b/gnome-flashback/libcommon/gf-popup-window.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2015 Alberts Muktupāvels
+ *
+ * This program 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.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GF_POPUP_WINDOW_H
+#define GF_POPUP_WINDOW_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GF_TYPE_POPUP_WINDOW gf_popup_window_get_type ()
+G_DECLARE_DERIVABLE_TYPE (GfPopupWindow, gf_popup_window,
+ GF, POPUP_WINDOW, GtkWindow)
+
+struct _GfPopupWindowClass
+{
+ GtkWindowClass parent_class;
+};
+
+void gf_popup_window_fade_start (GfPopupWindow *window);
+void gf_popup_window_fade_cancel (GfPopupWindow *window);
+
+G_END_DECLS
+
+#endif
diff --git a/gnome-flashback/libshell/flashback-label-window.c
b/gnome-flashback/libshell/flashback-label-window.c
index e00136a..84d7235 100644
--- a/gnome-flashback/libshell/flashback-label-window.c
+++ b/gnome-flashback/libshell/flashback-label-window.c
@@ -21,152 +21,32 @@
#include "flashback-label-window.h"
#define HIDE_TIMEOUT 1500
-#define FADE_TIMEOUT 10
struct _FlashbackLabelWindow
{
- GtkWindow parent;
+ GfPopupWindow parent;
- GdkRectangle monitor;
+ GdkRectangle monitor;
- guint hide_timeout_id;
- guint fade_timeout_id;
+ guint hide_timeout_id;
- gdouble fade_out_alpha;
-
- GtkWidget *label;
+ GtkWidget *label;
};
-G_DEFINE_TYPE (FlashbackLabelWindow, flashback_label_window, GTK_TYPE_WINDOW)
-
-static cairo_surface_t *
-flashback_label_window_draw_real (FlashbackLabelWindow *window,
- cairo_t *cr1,
- gint width,
- gint height)
-{
- cairo_surface_t *surface;
- cairo_t *cr2;
- GtkStyleContext *context;
-
- surface = cairo_surface_create_similar (cairo_get_target (cr1),
- CAIRO_CONTENT_COLOR_ALPHA,
- width, height);
-
- if (cairo_surface_status (surface) != CAIRO_STATUS_SUCCESS)
- {
- if (surface)
- cairo_surface_destroy (surface);
- return NULL;
- }
-
- cr2 = cairo_create (surface);
-
- if (cairo_status (cr2) != CAIRO_STATUS_SUCCESS)
- {
- cairo_surface_destroy (surface);
- return NULL;
- }
-
- context = gtk_widget_get_style_context (GTK_WIDGET (window));
- gtk_render_background (context, cr2, 0, 0, width, height);
- gtk_render_frame (context, cr2, 0, 0, width, height);
-
- cairo_destroy (cr2);
-
- return surface;
-}
-
-static gboolean
-flashback_label_window_draw (GtkWidget *widget,
- cairo_t *cr)
-{
- FlashbackLabelWindow *window;
- gint width;
- gint height;
- cairo_surface_t *surface;
-
- window = FLASHBACK_LABEL_WINDOW (widget);
-
- gtk_window_get_size (GTK_WINDOW (widget), &width, &height);
-
- surface = flashback_label_window_draw_real (window, cr, width, height);
-
- if (surface == NULL)
- return TRUE;
-
- cairo_rectangle (cr, 0, 0, width, height);
- cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.0);
- cairo_fill (cr);
-
- cairo_set_source_surface (cr, surface, 0, 0);
- cairo_paint_with_alpha (cr, window->fade_out_alpha);
-
- cairo_surface_destroy (surface);
-
- return GTK_WIDGET_CLASS (flashback_label_window_parent_class)->draw (widget, cr);
-}
-
-static gboolean
-fade_timeout_cb (gpointer user_data)
-{
- FlashbackLabelWindow *window;
-
- window = FLASHBACK_LABEL_WINDOW (user_data);
-
- if (window->fade_out_alpha <= 0.0)
- {
- window->fade_timeout_id = 0;
- gtk_widget_destroy (GTK_WIDGET (window));
-
- return FALSE;
- }
-
- window->fade_out_alpha -= 0.10;
-
- gtk_widget_queue_draw (GTK_WIDGET (window));
-
- return TRUE;
-}
+G_DEFINE_TYPE (FlashbackLabelWindow, flashback_label_window,
+ GF_TYPE_POPUP_WINDOW)
static void
-remove_fade_timeout (FlashbackLabelWindow *window)
+fade_finished_cb (GfPopupWindow *window)
{
- if (window->fade_timeout_id > 0)
- {
- g_source_remove (window->fade_timeout_id);
- window->fade_timeout_id = 0;
- window->fade_out_alpha = 1.0;
- }
-}
-
-static void
-flashback_label_window_finalize (GObject *object)
-{
- FlashbackLabelWindow *window;
-
- window = FLASHBACK_LABEL_WINDOW (object);
-
- remove_fade_timeout (window);
-
- G_OBJECT_CLASS (flashback_label_window_parent_class)->finalize (object);
+ gtk_widget_destroy (GTK_WIDGET (window));
}
static void
flashback_label_window_realize (GtkWidget *widget)
{
- GdkScreen *screen;
- GdkVisual *visual;
cairo_region_t *region;
- screen = gtk_widget_get_screen (widget);
- visual = gdk_screen_get_rgba_visual (screen);
-
- if (visual == NULL)
- visual = gdk_screen_get_system_visual (screen);
-
- gtk_widget_set_visual (widget, visual);
-
GTK_WIDGET_CLASS (flashback_label_window_parent_class)->realize (widget);
region = cairo_region_create ();
@@ -177,15 +57,10 @@ flashback_label_window_realize (GtkWidget *widget)
static void
flashback_label_window_class_init (FlashbackLabelWindowClass *window_class)
{
- GObjectClass *object_class;
GtkWidgetClass *widget_class;
- object_class = G_OBJECT_CLASS (window_class);
widget_class = GTK_WIDGET_CLASS (window_class);
- object_class->finalize = flashback_label_window_finalize;
-
- widget_class->draw = flashback_label_window_draw;
widget_class->realize = flashback_label_window_realize;
}
@@ -194,8 +69,6 @@ flashback_label_window_init (FlashbackLabelWindow *window)
{
GtkWidget *box;
- window->fade_out_alpha = 1.0;
-
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
gtk_container_set_border_width (GTK_CONTAINER (window), 20);
gtk_container_add (GTK_CONTAINER (window), box);
@@ -206,6 +79,9 @@ flashback_label_window_init (FlashbackLabelWindow *window)
gtk_widget_set_valign (window->label, GTK_ALIGN_CENTER);
gtk_box_pack_start (GTK_BOX (box), window->label, TRUE, FALSE, 0);
gtk_widget_show (window->label);
+
+ g_signal_connect (window, "fade-finished",
+ G_CALLBACK (fade_finished_cb), NULL);
}
FlashbackLabelWindow *
@@ -221,12 +97,6 @@ flashback_label_window_new (gint monitor,
screen = gdk_screen_get_default ();
window = g_object_new (FLASHBACK_TYPE_LABEL_WINDOW,
"type", GTK_WINDOW_POPUP,
- "type-hint", GDK_WINDOW_TYPE_HINT_NOTIFICATION,
- "app-paintable", TRUE,
- "decorated", FALSE,
- "skip-taskbar-hint", TRUE,
- "skip-pager-hint", TRUE,
- "focus-on-map", FALSE,
NULL);
gdk_screen_get_monitor_workarea (screen, monitor, &window->monitor);
@@ -268,13 +138,12 @@ flashback_label_window_show (FlashbackLabelWindow *window)
gtk_window_move (GTK_WINDOW (window), x, y);
gtk_widget_show (GTK_WIDGET (window));
- remove_fade_timeout (window);
+
+ gf_popup_window_fade_cancel (GF_POPUP_WINDOW (window));
}
void
flashback_label_window_hide (FlashbackLabelWindow *window)
{
- window->fade_timeout_id = g_timeout_add (FADE_TIMEOUT,
- (GSourceFunc) fade_timeout_cb,
- window);
+ gf_popup_window_fade_start (GF_POPUP_WINDOW (window));
}
diff --git a/gnome-flashback/libshell/flashback-label-window.h
b/gnome-flashback/libshell/flashback-label-window.h
index e336bf0..e74d76b 100644
--- a/gnome-flashback/libshell/flashback-label-window.h
+++ b/gnome-flashback/libshell/flashback-label-window.h
@@ -18,13 +18,13 @@
#ifndef FLASHBACK_LABEL_WINDOW_H
#define FLASHBACK_LABEL_WINDOW_H
-#include <gtk/gtk.h>
+#include <libcommon/gf-popup-window.h>
G_BEGIN_DECLS
#define FLASHBACK_TYPE_LABEL_WINDOW flashback_label_window_get_type ()
G_DECLARE_FINAL_TYPE (FlashbackLabelWindow, flashback_label_window,
- FLASHBACK, LABEL_WINDOW, GtkWindow)
+ FLASHBACK, LABEL_WINDOW, GfPopupWindow)
FlashbackLabelWindow *flashback_label_window_new (gint monitor,
const gchar *label);
diff --git a/gnome-flashback/libshell/flashback-osd-window.c b/gnome-flashback/libshell/flashback-osd-window.c
index e32cce6..2965baa 100644
--- a/gnome-flashback/libshell/flashback-osd-window.c
+++ b/gnome-flashback/libshell/flashback-osd-window.c
@@ -21,116 +21,29 @@
#include "flashback-osd-window.h"
#define HIDE_TIMEOUT 1500
-#define FADE_TIMEOUT 10
struct _FlashbackOsdWindow
{
- GtkWindow parent;
+ GfPopupWindow parent;
- GdkRectangle monitor;
+ GdkRectangle monitor;
- guint hide_timeout_id;
- guint fade_timeout_id;
+ guint hide_timeout_id;
- gdouble fade_out_alpha;
+ GtkWidget *icon_image;
+ gint icon_size;
- GtkWidget *icon_image;
- gint icon_size;
+ GtkWidget *label;
- GtkWidget *label;
-
- GtkWidget *level;
+ GtkWidget *level;
};
-G_DEFINE_TYPE (FlashbackOsdWindow, flashback_osd_window, GTK_TYPE_WINDOW)
-
-static cairo_surface_t *
-flashback_osd_window_draw_real (FlashbackOsdWindow *window,
- cairo_t *cr1,
- gint width,
- gint height)
-{
- cairo_surface_t *surface;
- cairo_t *cr2;
- GtkStyleContext *context;
-
- surface = cairo_surface_create_similar (cairo_get_target (cr1),
- CAIRO_CONTENT_COLOR_ALPHA,
- width, height);
-
- if (cairo_surface_status (surface) != CAIRO_STATUS_SUCCESS)
- {
- if (surface)
- cairo_surface_destroy (surface);
- return NULL;
- }
-
- cr2 = cairo_create (surface);
-
- if (cairo_status (cr2) != CAIRO_STATUS_SUCCESS)
- {
- cairo_surface_destroy (surface);
- return NULL;
- }
-
- context = gtk_widget_get_style_context (GTK_WIDGET (window));
- gtk_render_background (context, cr2, 0, 0, width, height);
- gtk_render_frame (context, cr2, 0, 0, width, height);
-
- cairo_destroy (cr2);
-
- return surface;
-}
-
-static gboolean
-flashback_osd_window_draw (GtkWidget *widget,
- cairo_t *cr)
-{
- FlashbackOsdWindow *window;
- gint width;
- gint height;
- cairo_surface_t *surface;
-
- window = FLASHBACK_OSD_WINDOW (widget);
-
- gtk_window_get_size (GTK_WINDOW (widget), &width, &height);
-
- surface = flashback_osd_window_draw_real (window, cr, width, height);
-
- if (surface == NULL)
- return TRUE;
-
- cairo_rectangle (cr, 0, 0, width, height);
- cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.0);
- cairo_fill (cr);
+G_DEFINE_TYPE (FlashbackOsdWindow, flashback_osd_window, GF_TYPE_POPUP_WINDOW)
- cairo_set_source_surface (cr, surface, 0, 0);
- cairo_paint_with_alpha (cr, window->fade_out_alpha);
-
- cairo_surface_destroy (surface);
-
- return GTK_WIDGET_CLASS (flashback_osd_window_parent_class)->draw (widget, cr);
-}
-
-static gboolean
-fade_timeout_cb (gpointer user_data)
+static void
+fade_finished_cb (GfPopupWindow *window)
{
- FlashbackOsdWindow *window;
-
- window = FLASHBACK_OSD_WINDOW (user_data);
-
- if (window->fade_out_alpha <= 0.0)
- {
- flashback_osd_window_hide (window);
-
- return FALSE;
- }
-
- window->fade_out_alpha -= 0.10;
-
- gtk_widget_queue_draw (GTK_WIDGET (window));
-
- return TRUE;
+ flashback_osd_window_hide (FLASHBACK_OSD_WINDOW (window));
}
static gboolean
@@ -140,9 +53,7 @@ hide_timeout_cb (gpointer user_data)
window = FLASHBACK_OSD_WINDOW (user_data);
- window->fade_timeout_id = g_timeout_add (FADE_TIMEOUT,
- (GSourceFunc) fade_timeout_cb,
- window);
+ gf_popup_window_fade_start (GF_POPUP_WINDOW (window));
window->hide_timeout_id = 0;
@@ -166,12 +77,7 @@ remove_hide_timeout (FlashbackOsdWindow *window)
window->hide_timeout_id = 0;
}
- if (window->fade_timeout_id > 0)
- {
- g_source_remove (window->fade_timeout_id);
- window->fade_timeout_id = 0;
- window->fade_out_alpha = 1.0;
- }
+ gf_popup_window_fade_cancel (GF_POPUP_WINDOW (window));
}
static void
@@ -189,18 +95,8 @@ flashback_osd_window_finalize (GObject *object)
static void
flashback_osd_window_realize (GtkWidget *widget)
{
- GdkScreen *screen;
- GdkVisual *visual;
cairo_region_t *region;
- screen = gtk_widget_get_screen (widget);
- visual = gdk_screen_get_rgba_visual (screen);
-
- if (visual == NULL)
- visual = gdk_screen_get_system_visual (screen);
-
- gtk_widget_set_visual (widget, visual);
-
GTK_WIDGET_CLASS (flashback_osd_window_parent_class)->realize (widget);
region = cairo_region_create ();
@@ -219,7 +115,6 @@ flashback_osd_window_class_init (FlashbackOsdWindowClass *window_class)
object_class->finalize = flashback_osd_window_finalize;
- widget_class->draw = flashback_osd_window_draw;
widget_class->realize = flashback_osd_window_realize;
}
@@ -228,8 +123,6 @@ flashback_osd_window_init (FlashbackOsdWindow *window)
{
GtkWidget *box;
- window->fade_out_alpha = 1.0;
-
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
gtk_container_set_border_width (GTK_CONTAINER (window), 20);
gtk_container_add (GTK_CONTAINER (window), box);
@@ -247,6 +140,9 @@ flashback_osd_window_init (FlashbackOsdWindow *window)
window->level = gtk_level_bar_new_for_interval (0, 100);
gtk_widget_set_halign (window->level, GTK_ALIGN_FILL);
gtk_box_pack_start (GTK_BOX (box), window->level, FALSE, FALSE, 0);
+
+ g_signal_connect (window, "fade-finished",
+ G_CALLBACK (fade_finished_cb), NULL);
}
FlashbackOsdWindow *
@@ -261,12 +157,6 @@ flashback_osd_window_new (gint monitor)
screen = gdk_screen_get_default ();
window = g_object_new (FLASHBACK_TYPE_OSD_WINDOW,
"type", GTK_WINDOW_POPUP,
- "type-hint", GDK_WINDOW_TYPE_HINT_NOTIFICATION,
- "app-paintable", TRUE,
- "decorated", FALSE,
- "skip-taskbar-hint", TRUE,
- "skip-pager-hint", TRUE,
- "focus-on-map", FALSE,
NULL);
gdk_screen_get_monitor_workarea (screen, monitor, &window->monitor);
diff --git a/gnome-flashback/libshell/flashback-osd-window.h b/gnome-flashback/libshell/flashback-osd-window.h
index 6d1687a..302ae38 100644
--- a/gnome-flashback/libshell/flashback-osd-window.h
+++ b/gnome-flashback/libshell/flashback-osd-window.h
@@ -18,13 +18,13 @@
#ifndef FLASHBACK_OSD_WINDOW_H
#define FLASHBACK_OSD_WINDOW_H
-#include <gtk/gtk.h>
+#include <libcommon/gf-popup-window.h>
G_BEGIN_DECLS
#define FLASHBACK_TYPE_OSD_WINDOW flashback_osd_window_get_type ()
G_DECLARE_FINAL_TYPE (FlashbackOsdWindow, flashback_osd_window,
- FLASHBACK, OSD_WINDOW, GtkWindow)
+ FLASHBACK, OSD_WINDOW, GfPopupWindow)
FlashbackOsdWindow *flashback_osd_window_new (gint monitor);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]