[PATCH] Remove custom OSD brightness popup, use libnotify instead

Jannis Pohlmann jannis at xfce.org
Sun Feb 3 00:41:23 CET 2013


The custom rendered OSD popup to indicate the current brightness
state whenever it changed looked nice but it is better handled in
the notification daemon. E.g. we could include an extension hint
in the notification to have xfce4-notifyd render certain
notifications (e.g. brightness, volume changes) in a different style
than regular notifications.

This commit simplifies the whole brightness notification logic
quite a bit.

Signed-off-by: Jannis Pohlmann <jannis at xfce.org>
---
 src/Makefile.am             |    4 +-
 src/gsd-media-keys-window.c | 1078 -------------------------------------------
 src/gsd-media-keys-window.h |   71 ---
 src/xfpm-backlight.c        |  128 +----
 src/xfpm-notify.c           |    2 +-
 5 files changed, 19 insertions(+), 1264 deletions(-)
 delete mode 100644 src/gsd-media-keys-window.c
 delete mode 100644 src/gsd-media-keys-window.h

diff --git a/src/Makefile.am b/src/Makefile.am
index eaca181..0435bed 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -37,9 +37,7 @@ xfce4_power_manager_SOURCES =                   \
 	xfpm-polkit.c				\
 	xfpm-polkit.h				\
 	xfpm-errors.c				\
-	xfpm-errors.h				\
-	gsd-media-keys-window.c			\
-	gsd-media-keys-window.h
+	xfpm-errors.h
 
 xfce4_power_manager_CFLAGS =                    \
 	-I$(top_srcdir)                         \
diff --git a/src/gsd-media-keys-window.c b/src/gsd-media-keys-window.c
deleted file mode 100644
index b2664e2..0000000
--- a/src/gsd-media-keys-window.c
+++ /dev/null
@@ -1,1078 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2006-2007 William Jon McCann <mccann at jhu.edu>
- *
- * 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 2 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include "gsd-media-keys-window.h"
-
-#include "data/interfaces/acme_ui.h"
-
-#define DIALOG_TIMEOUT 2000     /* dialog timeout in ms */
-#define DIALOG_FADE_TIMEOUT 1500 /* timeout before fade starts */
-#define FADE_TIMEOUT 10        /* timeout in ms between each frame of the fade */
-
-#define BG_ALPHA 0.75
-#define FG_ALPHA 1.00
-
-#define GSD_MEDIA_KEYS_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_MEDIA_KEYS_WINDOW, GsdMediaKeysWindowPrivate))
-
-struct GsdMediaKeysWindowPrivate
-{
-        guint                    is_composited : 1;
-        guint                    hide_timeout_id;
-        guint                    fade_timeout_id;
-        double                   fade_out_alpha;
-        GsdMediaKeysWindowAction action;
-        char                    *icon_name;
-        gboolean                 show_level;
-
-        guint                    volume_muted : 1;
-        int                      volume_level;
-
-        GtkImage                *image;
-        GtkWidget               *progress;
-};
-
-G_DEFINE_TYPE (GsdMediaKeysWindow, gsd_media_keys_window, GTK_TYPE_WINDOW)
-
-static gboolean
-fade_timeout (GsdMediaKeysWindow *window)
-{
-        if (window->priv->fade_out_alpha <= 0.0) {
-                gtk_widget_hide (GTK_WIDGET (window));
-
-                /* Reset it for the next time */
-                window->priv->fade_out_alpha = 1.0;
-                window->priv->fade_timeout_id = 0;
-
-                return FALSE;
-        } else {
-                GdkRectangle rect;
-                GtkWidget *win = GTK_WIDGET (window);
-                GtkAllocation allocation;
-
-                window->priv->fade_out_alpha -= 0.10;
-
-                rect.x = 0;
-                rect.y = 0;
-                gtk_widget_get_allocation (win, &allocation);
-                rect.width = allocation.width;
-                rect.height = allocation.height;
-
-                gtk_widget_realize (win);
-                gdk_window_invalidate_rect (gtk_widget_get_window (win), &rect, FALSE);
-        }
-
-        return TRUE;
-}
-
-static gboolean
-hide_timeout (GsdMediaKeysWindow *window)
-{
-        if (window->priv->is_composited) {
-                window->priv->hide_timeout_id = 0;
-                window->priv->fade_timeout_id = g_timeout_add (FADE_TIMEOUT,
-                                                               (GSourceFunc) fade_timeout,
-                                                               window);
-        } else {
-                gtk_widget_hide (GTK_WIDGET (window));
-        }
-
-        return FALSE;
-}
-
-static void
-remove_hide_timeout (GsdMediaKeysWindow *window)
-{
-        if (window->priv->hide_timeout_id != 0) {
-                g_source_remove (window->priv->hide_timeout_id);
-                window->priv->hide_timeout_id = 0;
-        }
-
-        if (window->priv->fade_timeout_id != 0) {
-                g_source_remove (window->priv->fade_timeout_id);
-                window->priv->fade_timeout_id = 0;
-                window->priv->fade_out_alpha = 1.0;
-        }
-}
-
-static void
-add_hide_timeout (GsdMediaKeysWindow *window)
-{
-        int timeout;
-
-        if (window->priv->is_composited) {
-                timeout = DIALOG_FADE_TIMEOUT;
-        } else {
-                timeout = DIALOG_TIMEOUT;
-        }
-        window->priv->hide_timeout_id = g_timeout_add (timeout,
-                                                       (GSourceFunc) hide_timeout,
-                                                       window);
-}
-
-static void
-update_window (GsdMediaKeysWindow *window)
-{
-        remove_hide_timeout (window);
-        add_hide_timeout (window);
-
-        if (window->priv->is_composited) {
-                gtk_widget_queue_draw (GTK_WIDGET (window));
-        }
-}
-
-static void
-volume_controls_set_visible (GsdMediaKeysWindow *window,
-                             gboolean            visible)
-{
-        if (window->priv->progress == NULL)
-                return;
-
-        if (visible) {
-                gtk_widget_show (window->priv->progress);
-        } else {
-                gtk_widget_hide (window->priv->progress);
-        }
-}
-
-static void
-window_set_icon_name (GsdMediaKeysWindow *window,
-                      const char         *name)
-{
-        if (window->priv->image == NULL)
-                return;
-
-        gtk_image_set_from_icon_name (window->priv->image,
-                                      name, GTK_ICON_SIZE_DIALOG);
-}
-
-static void
-action_changed (GsdMediaKeysWindow *window)
-{
-        if (! window->priv->is_composited) {
-                switch (window->priv->action) {
-                case GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME:
-                        volume_controls_set_visible (window, TRUE);
-
-                        if (window->priv->volume_muted) {
-                                window_set_icon_name (window, "audio-volume-muted");
-                        } else {
-                                window_set_icon_name (window, "audio-volume-high");
-                        }
-
-                        break;
-                case GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM:
-                        volume_controls_set_visible (window, window->priv->show_level);
-                        window_set_icon_name (window, window->priv->icon_name);
-                        break;
-                default:
-                        g_assert_not_reached ();
-                        break;
-                }
-        }
-
-        update_window (window);
-}
-
-static void
-volume_level_changed (GsdMediaKeysWindow *window)
-{
-        update_window (window);
-
-        if (!window->priv->is_composited && window->priv->progress != NULL) {
-                double fraction;
-
-                fraction = (double) window->priv->volume_level / 100.0;
-
-                gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (window->priv->progress),
-                                               fraction);
-        }
-}
-
-static void
-volume_muted_changed (GsdMediaKeysWindow *window)
-{
-        update_window (window);
-
-        if (! window->priv->is_composited) {
-                if (window->priv->volume_muted) {
-                        window_set_icon_name (window, "audio-volume-muted");
-                } else {
-                        window_set_icon_name (window, "audio-volume-high");
-                }
-        }
-}
-
-void
-gsd_media_keys_window_set_action (GsdMediaKeysWindow      *window,
-                                  GsdMediaKeysWindowAction action)
-{
-        g_return_if_fail (GSD_IS_MEDIA_KEYS_WINDOW (window));
-        g_return_if_fail (action == GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME);
-
-        if (window->priv->action != action) {
-                window->priv->action = action;
-                action_changed (window);
-        } else {
-                update_window (window);
-        }
-}
-
-void
-gsd_media_keys_window_set_action_custom (GsdMediaKeysWindow      *window,
-                                         const char              *icon_name,
-                                         gboolean                 show_level)
-{
-        g_return_if_fail (GSD_IS_MEDIA_KEYS_WINDOW (window));
-        g_return_if_fail (icon_name != NULL);
-
-        if (window->priv->action != GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM ||
-            g_strcmp0 (window->priv->icon_name, icon_name) != 0 ||
-            window->priv->show_level != show_level) {
-                window->priv->action = GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM;
-                g_free (window->priv->icon_name);
-                window->priv->icon_name = g_strdup (icon_name);
-                window->priv->show_level = show_level;
-                action_changed (window);
-        } else {
-                update_window (window);
-        }
-}
-
-void
-gsd_media_keys_window_set_volume_muted (GsdMediaKeysWindow *window,
-                                        gboolean            muted)
-{
-        g_return_if_fail (GSD_IS_MEDIA_KEYS_WINDOW (window));
-
-        if (window->priv->volume_muted != muted) {
-                window->priv->volume_muted = muted;
-                volume_muted_changed (window);
-        }
-}
-
-void
-gsd_media_keys_window_set_volume_level (GsdMediaKeysWindow *window,
-                                        int                 level)
-{
-        g_return_if_fail (GSD_IS_MEDIA_KEYS_WINDOW (window));
-
-        if (window->priv->volume_level != level) {
-                window->priv->volume_level = level;
-                volume_level_changed (window);
-        }
-}
-
-static void
-rounded_rectangle (cairo_t* cr,
-                   gdouble  aspect,
-                   gdouble  x,
-                   gdouble  y,
-                   gdouble  corner_radius,
-                   gdouble  width,
-                   gdouble  height)
-{
-        gdouble radius = corner_radius / aspect;
-
-        cairo_move_to (cr, x + radius, y);
-
-        cairo_line_to (cr,
-                       x + width - radius,
-                       y);
-        cairo_arc (cr,
-                   x + width - radius,
-                   y + radius,
-                   radius,
-                   -90.0f * G_PI / 180.0f,
-                   0.0f * G_PI / 180.0f);
-        cairo_line_to (cr,
-                       x + width,
-                       y + height - radius);
-        cairo_arc (cr,
-                   x + width - radius,
-                   y + height - radius,
-                   radius,
-                   0.0f * G_PI / 180.0f,
-                   90.0f * G_PI / 180.0f);
-        cairo_line_to (cr,
-                       x + radius,
-                       y + height);
-        cairo_arc (cr,
-                   x + radius,
-                   y + height - radius,
-                   radius,
-                   90.0f * G_PI / 180.0f,
-                   180.0f * G_PI / 180.0f);
-        cairo_line_to (cr,
-                       x,
-                       y + radius);
-        cairo_arc (cr,
-                   x + radius,
-                   y + radius,
-                   radius,
-                   180.0f * G_PI / 180.0f,
-                   270.0f * G_PI / 180.0f);
-        cairo_close_path (cr);
-}
-
-static GdkPixbuf *
-load_pixbuf (GsdMediaKeysWindow *window,
-             const char         *name,
-             int                 icon_size)
-{
-        GtkIconTheme *theme;
-        GdkPixbuf    *pixbuf;
-
-        if (window != NULL && gtk_widget_has_screen (GTK_WIDGET (window))) {
-                theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (window)));
-        } else {
-                theme = gtk_icon_theme_get_default ();
-        }
-
-        pixbuf = gtk_icon_theme_load_icon (theme,
-                                           name,
-                                           icon_size,
-                                           GTK_ICON_LOOKUP_FORCE_SVG,
-                                           NULL);
-
-        /* make sure the pixbuf is close to the requested size
-         * this is necessary because GTK_ICON_LOOKUP_FORCE_SVG
-         * seems to be broken */
-        if (pixbuf != NULL) {
-                int width;
-
-                width = gdk_pixbuf_get_width (pixbuf);
-                if (width < (float)icon_size * 0.75) {
-                        g_object_unref (pixbuf);
-                        pixbuf = NULL;
-                }
-        }
-
-        return pixbuf;
-}
-
-static void
-draw_eject (cairo_t *cr,
-            double   _x0,
-            double   _y0,
-            double   width,
-            double   height)
-{
-        int box_height;
-        int tri_height;
-        int separation;
-
-        box_height = height * 0.2;
-        separation = box_height / 3;
-        tri_height = height - box_height - separation;
-
-        cairo_rectangle (cr, _x0, _y0 + height - box_height, width, box_height);
-
-        cairo_move_to (cr, _x0, _y0 + tri_height);
-        cairo_rel_line_to (cr, width, 0);
-        cairo_rel_line_to (cr, -width / 2, -tri_height);
-        cairo_rel_line_to (cr, -width / 2, tri_height);
-        cairo_close_path (cr);
-        cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, FG_ALPHA);
-        cairo_fill_preserve (cr);
-
-        cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, FG_ALPHA / 2);
-        cairo_set_line_width (cr, 2);
-        cairo_stroke (cr);
-}
-
-static void
-draw_waves (cairo_t *cr,
-            double   cx,
-            double   cy,
-            double   max_radius,
-            int      volume_level)
-{
-        const int n_waves = 3;
-        int last_wave;
-        int i;
-
-        last_wave = n_waves * volume_level / 100;
-
-        for (i = 0; i < n_waves; i++) {
-                double angle1;
-                double angle2;
-                double radius;
-                double alpha;
-
-                angle1 = -M_PI / 4;
-                angle2 = M_PI / 4;
-
-                if (i < last_wave)
-                        alpha = 1.0;
-                else if (i > last_wave)
-                        alpha = 0.1;
-                else alpha = 0.1 + 0.9 * (n_waves * volume_level % 100) / 100.0;
-
-                radius = (i + 1) * (max_radius / n_waves);
-                cairo_arc (cr, cx, cy, radius, angle1, angle2);
-                cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, alpha / 2);
-                cairo_set_line_width (cr, 14);
-                cairo_set_line_cap  (cr, CAIRO_LINE_CAP_ROUND);
-                cairo_stroke_preserve (cr);
-
-                cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, alpha);
-                cairo_set_line_width (cr, 10);
-                cairo_set_line_cap  (cr, CAIRO_LINE_CAP_ROUND);
-                cairo_stroke (cr);
-        }
-}
-
-static void
-draw_cross (cairo_t *cr,
-            double   cx,
-            double   cy,
-            double   size)
-{
-        cairo_move_to (cr, cx, cy - size/2.0);
-        cairo_rel_line_to (cr, size, size);
-
-        cairo_move_to (cr, cx, cy + size/2.0);
-        cairo_rel_line_to (cr, size, -size);
-
-        cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, FG_ALPHA / 2);
-        cairo_set_line_width (cr, 14);
-        cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
-        cairo_stroke_preserve (cr);
-
-        cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, FG_ALPHA);
-        cairo_set_line_width (cr, 10);
-        cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
-        cairo_stroke (cr);
-}
-
-static void
-draw_speaker (cairo_t *cr,
-              double   cx,
-              double   cy,
-              double   width,
-              double   height)
-{
-        double box_width;
-        double box_height;
-        double _x0;
-        double _y0;
-
-        box_width = width / 3;
-        box_height = height / 3;
-
-        _x0 = cx - (width / 2) + box_width;
-        _y0 = cy - box_height / 2;
-
-        cairo_move_to (cr, _x0, _y0);
-        cairo_rel_line_to (cr, - box_width, 0);
-        cairo_rel_line_to (cr, 0, box_height);
-        cairo_rel_line_to (cr, box_width, 0);
-
-        cairo_line_to (cr, cx + box_width, cy + height / 2);
-        cairo_rel_line_to (cr, 0, -height);
-        cairo_line_to (cr, _x0, _y0);
-        cairo_close_path (cr);
-
-        cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, FG_ALPHA);
-        cairo_fill_preserve (cr);
-
-        cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, FG_ALPHA / 2);
-        cairo_set_line_width (cr, 2);
-        cairo_stroke (cr);
-}
-
-static gboolean
-render_speaker (GsdMediaKeysWindow *window,
-                cairo_t            *cr,
-                double              _x0,
-                double              _y0,
-                double              width,
-                double              height)
-{
-        GdkPixbuf         *pixbuf;
-        int                icon_size;
-        int                n;
-        static const char *icon_names[] = {
-                "audio-volume-muted",
-                "audio-volume-low",
-                "audio-volume-medium",
-                "audio-volume-high",
-                NULL
-        };
-
-        if (window->priv->volume_muted) {
-                n = 0;
-        } else {
-                /* select image */
-                n = 3 * window->priv->volume_level / 100 + 1;
-                if (n < 1) {
-                        n = 1;
-                } else if (n > 3) {
-                        n = 3;
-                }
-        }
-
-        icon_size = (int)width;
-
-        pixbuf = load_pixbuf (window, icon_names[n], icon_size);
-
-        if (pixbuf == NULL) {
-                return FALSE;
-        }
-
-        gdk_cairo_set_source_pixbuf (cr, pixbuf, _x0, _y0);
-        cairo_paint_with_alpha (cr, FG_ALPHA);
-
-        g_object_unref (pixbuf);
-
-        return TRUE;
-}
-
-static void
-color_reverse (const GdkColor *a,
-               GdkColor       *b)
-{
-        gdouble red;
-        gdouble green;
-        gdouble blue;
-        gdouble h;
-        gdouble s;
-        gdouble v;
-
-        red = (gdouble) a->red / 65535.0;
-        green = (gdouble) a->green / 65535.0;
-        blue = (gdouble) a->blue / 65535.0;
-
-        gtk_rgb_to_hsv (red, green, blue, &h, &s, &v);
-
-        v = 0.5 + (0.5 - v);
-        if (v > 1.0)
-                v = 1.0;
-        else if (v < 0.0)
-                v = 0.0;
-
-        gtk_hsv_to_rgb (h, s, v, &red, &green, &blue);
-
-        b->red = red * 65535.0;
-        b->green = green * 65535.0;
-        b->blue = blue * 65535.0;
-}
-
-static void
-draw_volume_boxes (GsdMediaKeysWindow *window,
-                   cairo_t            *cr,
-                   double              percentage,
-                   double              _x0,
-                   double              _y0,
-                   double              width,
-                   double              height)
-{
-        gdouble   x1;
-        GdkColor  color;
-        double    r, g, b;
-        GtkStyle *style;
-
-        _x0 += 0.5;
-        _y0 += 0.5;
-        height = round (height) - 1;
-        width = round (width) - 1;
-        x1 = round ((width - 1) * percentage);
-        style = gtk_widget_get_style (GTK_WIDGET (window));
-
-        /* bar background */
-        color_reverse (&style->dark[GTK_STATE_NORMAL], &color);
-        r = (float)color.red / 65535.0;
-        g = (float)color.green / 65535.0;
-        b = (float)color.blue / 65535.0;
-        rounded_rectangle (cr, 1.0, _x0, _y0, height / 6, width, height);
-        cairo_set_source_rgba (cr, r, g, b, FG_ALPHA / 2);
-        cairo_fill_preserve (cr);
-
-        /* bar border */
-        color_reverse (&style->light[GTK_STATE_NORMAL], &color);
-        r = (float)color.red / 65535.0;
-        g = (float)color.green / 65535.0;
-        b = (float)color.blue / 65535.0;
-        cairo_set_source_rgba (cr, r, g, b, FG_ALPHA / 2);
-        cairo_set_line_width (cr, 1);
-        cairo_stroke (cr);
-
-        /* bar progress */
-        if (percentage < 0.01)
-                return;
-        color = style->bg[GTK_STATE_NORMAL];
-        r = (float)color.red / 65535.0;
-        g = (float)color.green / 65535.0;
-        b = (float)color.blue / 65535.0;
-        rounded_rectangle (cr, 1.0, _x0 + 0.5, _y0 + 0.5, height / 6 - 0.5, x1, height - 1);
-        cairo_set_source_rgba (cr, r, g, b, FG_ALPHA);
-        cairo_fill (cr);
-}
-
-static void
-draw_action_volume (GsdMediaKeysWindow *window,
-                    cairo_t            *cr)
-{
-        int window_width;
-        int window_height;
-        double icon_box_width;
-        double icon_box_height;
-        double icon_box_x0;
-        double icon_box_y0;
-        double volume_box_x0;
-        double volume_box_y0;
-        double volume_box_width;
-        double volume_box_height;
-        gboolean res;
-
-        gtk_window_get_size (GTK_WINDOW (window), &window_width, &window_height);
-
-        icon_box_width = round (window_width * 0.65);
-        icon_box_height = round (window_height * 0.65);
-        volume_box_width = icon_box_width;
-        volume_box_height = round (window_height * 0.05);
-
-        icon_box_x0 = (window_width - icon_box_width) / 2;
-        icon_box_y0 = (window_height - icon_box_height - volume_box_height) / 2;
-        volume_box_x0 = round (icon_box_x0);
-        volume_box_y0 = round (icon_box_height + icon_box_y0);
-
-#if 0
-        g_message ("icon box: w=%f h=%f _x0=%f _y0=%f",
-                   icon_box_width,
-                   icon_box_height,
-                   icon_box_x0,
-                   icon_box_y0);
-        g_message ("volume box: w=%f h=%f _x0=%f _y0=%f",
-                   volume_box_width,
-                   volume_box_height,
-                   volume_box_x0,
-                   volume_box_y0);
-#endif
-
-        res = render_speaker (window,
-                              cr,
-                              icon_box_x0, icon_box_y0,
-                              icon_box_width, icon_box_height);
-        if (! res) {
-                double speaker_width;
-                double speaker_height;
-                double speaker_cx;
-                double speaker_cy;
-
-                speaker_width = icon_box_width * 0.5;
-                speaker_height = icon_box_height * 0.75;
-                speaker_cx = icon_box_x0 + speaker_width / 2;
-                speaker_cy = icon_box_y0 + speaker_height / 2;
-
-#if 0
-                g_message ("speaker box: w=%f h=%f cx=%f cy=%f",
-                           speaker_width,
-                           speaker_height,
-                           speaker_cx,
-                           speaker_cy);
-#endif
-
-                /* draw speaker symbol */
-                draw_speaker (cr, speaker_cx, speaker_cy, speaker_width, speaker_height);
-
-                if (! window->priv->volume_muted) {
-                        /* draw sound waves */
-                        double wave_x0;
-                        double wave_y0;
-                        double wave_radius;
-
-                        wave_x0 = window_width / 2;
-                        wave_y0 = speaker_cy;
-                        wave_radius = icon_box_width / 2;
-
-                        draw_waves (cr, wave_x0, wave_y0, wave_radius, window->priv->volume_level);
-                } else {
-                        /* draw 'mute' cross */
-                        double cross_x0;
-                        double cross_y0;
-                        double cross_size;
-
-                        cross_size = speaker_width * 3 / 4;
-                        cross_x0 = icon_box_x0 + icon_box_width - cross_size;
-                        cross_y0 = speaker_cy;
-
-                        draw_cross (cr, cross_x0, cross_y0, cross_size);
-                }
-        }
-
-        /* draw volume meter */
-        draw_volume_boxes (window,
-                           cr,
-                           (double)window->priv->volume_level / 100.0,
-                           volume_box_x0,
-                           volume_box_y0,
-                           volume_box_width,
-                           volume_box_height);
-}
-
-static gboolean
-render_custom (GsdMediaKeysWindow *window,
-               cairo_t            *cr,
-               double              _x0,
-               double              _y0,
-               double              width,
-               double              height)
-{
-        GdkPixbuf         *pixbuf;
-        int                icon_size;
-
-        icon_size = (int)width;
-
-        pixbuf = load_pixbuf (window, window->priv->icon_name, icon_size);
-
-        if (pixbuf == NULL) {
-                char *name;
-                if (gtk_widget_get_direction (GTK_WIDGET (window)) == GTK_TEXT_DIR_RTL)
-                        name = g_strdup_printf ("%s-rtl", window->priv->icon_name);
-                else
-                        name = g_strdup_printf ("%s-ltr", window->priv->icon_name);
-                pixbuf = load_pixbuf (window, name, icon_size);
-                g_free (name);
-                if (pixbuf == NULL)
-                        return FALSE;
-        }
-
-        gdk_cairo_set_source_pixbuf (cr, pixbuf, _x0, _y0);
-        cairo_paint_with_alpha (cr, FG_ALPHA);
-
-        g_object_unref (pixbuf);
-
-        return TRUE;
-}
-
-static void
-draw_action_custom (GsdMediaKeysWindow *window,
-                    cairo_t            *cr)
-{
-        int window_width;
-        int window_height;
-        double icon_box_width;
-        double icon_box_height;
-        double icon_box_x0;
-        double icon_box_y0;
-        double bright_box_x0;
-        double bright_box_y0;
-        double bright_box_width;
-        double bright_box_height;
-        gboolean res;
-
-        gtk_window_get_size (GTK_WINDOW (window), &window_width, &window_height);
-
-        icon_box_width = round (window_width * 0.65);
-        icon_box_height = round (window_height * 0.65);
-        bright_box_width = round (icon_box_width);
-        bright_box_height = round (window_height * 0.05);
-
-        icon_box_x0 = (window_width - icon_box_width) / 2;
-        icon_box_y0 = (window_height - icon_box_height - bright_box_height) / 2;
-        bright_box_x0 = round (icon_box_x0);
-        bright_box_y0 = round (icon_box_height + icon_box_y0);
-
-#if 0
-        g_message ("icon box: w=%f h=%f _x0=%f _y0=%f",
-                   icon_box_width,
-                   icon_box_height,
-                   icon_box_x0,
-                   icon_box_y0);
-        g_message ("brightness box: w=%f h=%f _x0=%f _y0=%f",
-                   bright_box_width,
-                   bright_box_height,
-                   bright_box_x0,
-                   bright_box_y0);
-#endif
-
-        res = render_custom (window,
-                             cr,
-                             icon_box_x0, icon_box_y0,
-                             icon_box_width, icon_box_height);
-        if (! res && g_strcmp0 (window->priv->icon_name, "media-eject") == 0) {
-                /* draw eject symbol */
-                draw_eject (cr,
-                            icon_box_x0, icon_box_y0,
-                            icon_box_width, icon_box_height);
-        }
-
-        if (window->priv->show_level != FALSE) {
-                /* draw volume meter */
-                draw_volume_boxes (window,
-                                   cr,
-                                   (double)window->priv->volume_level / 100.0,
-                                   bright_box_x0,
-                                   bright_box_y0,
-                                   bright_box_width,
-                                   bright_box_height);
-        }
-}
-
-static void
-draw_action (GsdMediaKeysWindow *window,
-             cairo_t            *cr)
-{
-        switch (window->priv->action) {
-        case GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME:
-                draw_action_volume (window, cr);
-                break;
-        case GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM:
-                draw_action_custom (window, cr);
-                break;
-        default:
-                break;
-        }
-}
-
-static gboolean
-on_expose_event (GtkWidget          *widget,
-                 GdkEventExpose     *event,
-                 GsdMediaKeysWindow *window)
-{
-        cairo_t         *context;
-        cairo_t         *cr;
-        cairo_surface_t *surface;
-        int              width;
-        int              height;
-        GtkStyle        *style;
-        GdkColor         color;
-        double           r, g, b;
-
-        context = gdk_cairo_create (gtk_widget_get_window (widget));
-
-        style = gtk_widget_get_style (widget);
-        cairo_set_operator (context, CAIRO_OPERATOR_SOURCE);
-        gtk_window_get_size (GTK_WINDOW (widget), &width, &height);
-
-        surface = cairo_surface_create_similar (cairo_get_target (context),
-                                                CAIRO_CONTENT_COLOR_ALPHA,
-                                                width,
-                                                height);
-
-        if (cairo_surface_status (surface) != CAIRO_STATUS_SUCCESS) {
-                goto done;
-        }
-
-        cr = cairo_create (surface);
-        if (cairo_status (cr) != CAIRO_STATUS_SUCCESS) {
-                goto done;
-        }
-        cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0);
-        cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
-        cairo_paint (cr);
-
-        /* draw a box */
-        rounded_rectangle (cr, 1.0, 0.5, 0.5, height / 10, width-1, height-1);
-        color_reverse (&style->bg[GTK_STATE_NORMAL], &color);
-        r = (float)color.red / 65535.0;
-        g = (float)color.green / 65535.0;
-        b = (float)color.blue / 65535.0;
-        cairo_set_source_rgba (cr, r, g, b, BG_ALPHA);
-        cairo_fill_preserve (cr);
-
-        color_reverse (&style->text_aa[GTK_STATE_NORMAL], &color);
-        r = (float)color.red / 65535.0;
-        g = (float)color.green / 65535.0;
-        b = (float)color.blue / 65535.0;
-        cairo_set_source_rgba (cr, r, g, b, BG_ALPHA / 2);
-        cairo_set_line_width (cr, 1);
-        cairo_stroke (cr);
-
-        /* draw action */
-        draw_action (window, cr);
-
-        cairo_destroy (cr);
-
-        /* Make sure we have a transparent background */
-        cairo_rectangle (context, 0, 0, width, height);
-        cairo_set_source_rgba (context, 0.0, 0.0, 0.0, 0.0);
-        cairo_fill (context);
-
-        cairo_set_source_surface (context, surface, 0, 0);
-        cairo_paint_with_alpha (context, window->priv->fade_out_alpha);
-
- done:
-        if (surface != NULL) {
-                cairo_surface_destroy (surface);
-        }
-        cairo_destroy (context);
-
-        return FALSE;
-}
-
-static void
-gsd_media_keys_window_real_show (GtkWidget *widget)
-{
-        GsdMediaKeysWindow *window;
-
-        if (GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->show) {
-                GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->show (widget);
-        }
-
-        window = GSD_MEDIA_KEYS_WINDOW (widget);
-        remove_hide_timeout (window);
-        add_hide_timeout (window);
-}
-
-static void
-gsd_media_keys_window_real_hide (GtkWidget *widget)
-{
-        GsdMediaKeysWindow *window;
-
-        if (GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->hide) {
-                GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->hide (widget);
-        }
-
-        window = GSD_MEDIA_KEYS_WINDOW (widget);
-        remove_hide_timeout (window);
-}
-
-static void
-gsd_media_keys_window_real_realize (GtkWidget *widget)
-{
-        GdkColormap *colormap;
-        GtkAllocation allocation;
-        GdkBitmap *mask;
-        cairo_t *cr;
-
-        colormap = gdk_screen_get_rgba_colormap (gtk_widget_get_screen (widget));
-
-        if (colormap != NULL) {
-                gtk_widget_set_colormap (widget, colormap);
-        }
-
-        if (GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->realize) {
-                GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->realize (widget);
-        }
-
-        gtk_widget_get_allocation (widget, &allocation);
-        mask = gdk_pixmap_new (gtk_widget_get_window (widget),
-                               allocation.width,
-                               allocation.height,
-                               1);
-        cr = gdk_cairo_create (mask);
-
-        cairo_set_source_rgba (cr, 1., 1., 1., 0.);
-        cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
-        cairo_paint (cr);
-
-        /* make the whole window ignore events */
-        gdk_window_input_shape_combine_mask (gtk_widget_get_window (widget), mask, 0, 0);
-        g_object_unref (mask);
-        cairo_destroy (cr);
-}
-
-static void
-gsd_media_keys_window_class_init (GsdMediaKeysWindowClass *klass)
-{
-        GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
-        widget_class->show = gsd_media_keys_window_real_show;
-        widget_class->hide = gsd_media_keys_window_real_hide;
-        widget_class->realize = gsd_media_keys_window_real_realize;
-
-        g_type_class_add_private (klass, sizeof (GsdMediaKeysWindowPrivate));
-}
-
-gboolean
-gsd_media_keys_window_is_valid (GsdMediaKeysWindow *window)
-{
-        GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (window));
-        return gdk_screen_is_composited (screen) == window->priv->is_composited;
-}
-
-static void
-gsd_media_keys_window_init (GsdMediaKeysWindow *window)
-{
-        GdkScreen *screen;
-
-        window->priv = GSD_MEDIA_KEYS_WINDOW_GET_PRIVATE (window);
-
-        screen = gtk_widget_get_screen (GTK_WIDGET (window));
-
-        window->priv->is_composited = gdk_screen_is_composited (screen);
-
-        if (window->priv->is_composited) {
-                gdouble scalew, scaleh, scale;
-                gint size;
-
-                gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
-                gtk_widget_set_app_paintable (GTK_WIDGET (window), TRUE);
-
-                /* assume 130x130 on a 640x480 display and scale from there */
-                scalew = gdk_screen_get_width (screen) / 640.0;
-                scaleh = gdk_screen_get_height (screen) / 480.0;
-                scale = MIN (scalew, scaleh);
-                size = 130 * MAX (1, scale);
-
-                gtk_window_set_default_size (GTK_WINDOW (window), size, size);
-                g_signal_connect (window, "expose-event", G_CALLBACK (on_expose_event), window);
-
-                window->priv->fade_out_alpha = 1.0;
-        } else {
-                GtkBuilder *builder;
-                const gchar *objects[] = {"acme_frame", NULL};
-                GtkWidget *frame;
-
-                builder = gtk_builder_new ();
-		gtk_builder_add_objects_from_string (builder, acme_ui, acme_ui_length, (char **)objects, NULL);
-
-                window->priv->image = GTK_IMAGE (gtk_builder_get_object (builder, "acme_image"));
-                window->priv->progress = GTK_WIDGET (gtk_builder_get_object (builder, "acme_volume_progressbar"));
-                frame = GTK_WIDGET (gtk_builder_get_object (builder,
-                                                            "acme_frame"));
-
-                if (frame != NULL) {
-                        gtk_container_add (GTK_CONTAINER (window), frame);
-                        gtk_widget_show_all (frame);
-                }
-
-                /* The builder needs to stay alive until the window
-                   takes ownership of the frame (and its children)  */
-                g_object_unref (builder);
-        }
-}
-
-GtkWidget *
-gsd_media_keys_window_new (void)
-{
-        GObject *object;
-
-        object = g_object_new (GSD_TYPE_MEDIA_KEYS_WINDOW,
-                               "type", GTK_WINDOW_POPUP,
-                               "type-hint", GDK_WINDOW_TYPE_HINT_NOTIFICATION,
-                               "skip-taskbar-hint", TRUE,
-                               "skip-pager-hint", TRUE,
-                               "focus-on-map", FALSE,
-                               NULL);
-
-        return GTK_WIDGET (object);
-}
diff --git a/src/gsd-media-keys-window.h b/src/gsd-media-keys-window.h
deleted file mode 100644
index 9c74bf5..0000000
--- a/src/gsd-media-keys-window.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * Copyright (C) 2006 William Jon McCann <mccann at jhu.edu>
- *
- * 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 2 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, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- */
-
-#ifndef GSD_MEDIA_KEYS_WINDOW_H
-#define GSD_MEDIA_KEYS_WINDOW_H
-
-#include <glib-object.h>
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define GSD_TYPE_MEDIA_KEYS_WINDOW            (gsd_media_keys_window_get_type ())
-#define GSD_MEDIA_KEYS_WINDOW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj),  GSD_TYPE_MEDIA_KEYS_WINDOW, GsdMediaKeysWindow))
-#define GSD_MEDIA_KEYS_WINDOW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),   GSD_TYPE_MEDIA_KEYS_WINDOW, GsdMediaKeysWindowClass))
-#define GSD_IS_MEDIA_KEYS_WINDOW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj),  GSD_TYPE_MEDIA_KEYS_WINDOW))
-#define GSD_IS_MEDIA_KEYS_WINDOW_CLASS(klass) (G_TYPE_INSTANCE_GET_CLASS ((klass), GSD_TYPE_MEDIA_KEYS_WINDOW))
-
-typedef struct GsdMediaKeysWindow                   GsdMediaKeysWindow;
-typedef struct GsdMediaKeysWindowClass              GsdMediaKeysWindowClass;
-typedef struct GsdMediaKeysWindowPrivate            GsdMediaKeysWindowPrivate;
-
-struct GsdMediaKeysWindow {
-        GtkWindow                   parent;
-
-        GsdMediaKeysWindowPrivate  *priv;
-};
-
-struct GsdMediaKeysWindowClass {
-        GtkWindowClass parent_class;
-};
-
-typedef enum {
-        GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME,
-        GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM
-} GsdMediaKeysWindowAction;
-
-GType                 gsd_media_keys_window_get_type          (void);
-
-GtkWidget *           gsd_media_keys_window_new               (void);
-void                  gsd_media_keys_window_set_action        (GsdMediaKeysWindow      *window,
-                                                               GsdMediaKeysWindowAction action);
-void                  gsd_media_keys_window_set_action_custom (GsdMediaKeysWindow      *window,
-                                                               const char              *icon_name,
-                                                               gboolean                 show_level);
-void                  gsd_media_keys_window_set_volume_muted  (GsdMediaKeysWindow      *window,
-                                                               gboolean                 muted);
-void                  gsd_media_keys_window_set_volume_level  (GsdMediaKeysWindow      *window,
-                                                               int                      level);
-gboolean              gsd_media_keys_window_is_valid          (GsdMediaKeysWindow      *window);
-
-G_END_DECLS
-
-#endif
diff --git a/src/xfpm-backlight.c b/src/xfpm-backlight.c
index 73bd5f6..baeeb43 100644
--- a/src/xfpm-backlight.c
+++ b/src/xfpm-backlight.c
@@ -42,14 +42,9 @@
 #include "xfpm-debug.h"
 #include "xfpm-icons.h"
 
-#include "gsd-media-keys-window.h"
-
 static void xfpm_backlight_finalize     (GObject *object);
 
-static void xfpm_backlight_create_popup (XfpmBacklight *backlight);
-
 #define ALARM_DISABLED 9
-#define BRIGHTNESS_POPUP_SIZE	180
 
 #define XFPM_BACKLIGHT_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE ((o), XFPM_TYPE_BACKLIGHT, XfpmBacklightPrivate))
@@ -63,12 +58,8 @@ struct XfpmBacklightPrivate
     XfpmButton     *button;
     XfpmNotify     *notify;
     
-    GtkWidget	   *osd;
     NotifyNotification *n;
     
-    
-    gulong	    destroy_id;
-    
     gboolean	    has_hw;
     gboolean	    on_battery;
     
@@ -123,12 +114,6 @@ xfpm_backlight_destroy_popup (gpointer data)
     
     backlight = XFPM_BACKLIGHT (data);
     
-    if ( backlight->priv->osd )
-    {
-	gtk_widget_destroy (backlight->priv->osd);
-	backlight->priv->osd = NULL;
-    }
-    
     if ( backlight->priv->n )
     {
 	g_object_unref (backlight->priv->n);
@@ -139,120 +124,43 @@ xfpm_backlight_destroy_popup (gpointer data)
 }
 
 static void
-xfpm_backlight_composited_changed_cb (XfpmBacklight *backlight)
-{
-    xfpm_backlight_destroy_popup (backlight);
-    xfpm_backlight_create_popup (backlight);
-}
-
-static void
 xfpm_backlight_show_notification (XfpmBacklight *backlight, gfloat value)
 {
-    gint i;
-    
-    static const char *display_icon_name[] = 
-    {
-	"notification-display-brightness-off",
-	"notification-display-brightness-low",
-	"notification-display-brightness-medium",
-	"notification-display-brightness-high",
-	"notification-display-brightness-full",
-	NULL
-    };
-    
+    gchar *summary;
+
+    /* create the notification on demand */
     if ( backlight->priv->n == NULL )
     {
-	backlight->priv->n = xfpm_notify_new_notification (backlight->priv->notify, 
-							   " ", 
-							   "", 
-							   NULL, 
-							   0, 
+	backlight->priv->n = xfpm_notify_new_notification (backlight->priv->notify,
+							   "",
+							   "",
+							   "xfpm-brightness-lcd",
+							   0,
 							   XFPM_NOTIFY_NORMAL,
 							   NULL);
     }
+
+    /* generate a human-readable summary for the notification */
+    summary = g_strdup_printf (_("Brightness: %.0f percent"), value);
+    notify_notification_update (backlight->priv->n, summary, NULL, NULL);
+    g_free (summary);
     
-    i = (gint)value / 25;
-    
-    if ( i > 4 || i < 0 )
-	return;
-    
-    notify_notification_set_hint_int32  (backlight->priv->n,
-					 "value",
-					 value);
-    
-    notify_notification_set_hint_string (backlight->priv->n,
-					 "x-canonical-private-synchronous",
-					 "brightness");
+    /* add the brightness value to the notification */
+    notify_notification_set_hint_int32 (backlight->priv->n, "value", value);
     
-    notify_notification_update (backlight->priv->n,
-			        " ",
-				"",
-				display_icon_name[i]);
-				
+    /* show the notification */
     notify_notification_show (backlight->priv->n, NULL);
 }
 
 static void
-xfpm_backlight_create_popup (XfpmBacklight *backlight)
-{
-    if ( backlight->priv->osd != NULL )
-	return;
-	
-    backlight->priv->osd = gsd_media_keys_window_new ();
-    gsd_media_keys_window_set_action_custom (GSD_MEDIA_KEYS_WINDOW (backlight->priv->osd),
-					     XFPM_DISPLAY_BRIGHTNESS_ICON,
-					     TRUE);
-    gtk_window_set_position (GTK_WINDOW (backlight->priv->osd), GTK_WIN_POS_CENTER);
-    
-    g_signal_connect_swapped (backlight->priv->osd, "composited-changed",
-			      G_CALLBACK (xfpm_backlight_composited_changed_cb), backlight);
-			      
-}
-
-static void
 xfpm_backlight_show (XfpmBacklight *backlight, gint level)
 {
     gfloat value;
-    gboolean sync_notify;
-    gboolean show_popup;
     
     XFPM_DEBUG ("Level %u", level);
     
-    g_object_get (G_OBJECT (backlight->priv->conf),
-                  SHOW_BRIGHTNESS_POPUP, &show_popup,
-                  NULL);
-		  
-    if ( !show_popup )
-	goto out;
-    
-    g_object_get (G_OBJECT (backlight->priv->notify),
-		  "sync", &sync_notify,
-		  NULL);
-    
     value = (gfloat) 100 * level / backlight->priv->max_level;
-    
-    if ( !sync_notify ) /*Notification server doesn't support sync notifications*/
-    {
-	xfpm_backlight_create_popup (backlight);
-	gsd_media_keys_window_set_volume_level (GSD_MEDIA_KEYS_WINDOW (backlight->priv->osd),
-						round (value));
-	if ( !GTK_WIDGET_VISIBLE (backlight->priv->osd))
-	    gtk_window_present (GTK_WINDOW (backlight->priv->osd));
-    }
-    else
-    {
-	xfpm_backlight_show_notification (backlight, value);
-    }
-    
-    if ( backlight->priv->destroy_id != 0 )
-    {
-	g_source_remove (backlight->priv->destroy_id);
-	backlight->priv->destroy_id = 0;
-    }
-    
-out:
-    /* Release the memory after 60 seconds */
-    backlight->priv->destroy_id = g_timeout_add_seconds (60, (GSourceFunc) xfpm_backlight_destroy_popup, backlight);
+    xfpm_backlight_show_notification (backlight, value);
 }
 
 
@@ -386,7 +294,6 @@ xfpm_backlight_init (XfpmBacklight *backlight)
     backlight->priv->brightness = xfpm_brightness_new ();
     backlight->priv->has_hw     = xfpm_brightness_setup (backlight->priv->brightness);
     
-    backlight->priv->osd    = NULL;
     backlight->priv->notify = NULL;
     backlight->priv->idle   = NULL;
     backlight->priv->conf   = NULL;
@@ -394,7 +301,6 @@ xfpm_backlight_init (XfpmBacklight *backlight)
     backlight->priv->power    = NULL;
     backlight->priv->dimmed = FALSE;
     backlight->priv->block = FALSE;
-    backlight->priv->destroy_id = 0;
     
     if ( !backlight->priv->has_hw )
     {
diff --git a/src/xfpm-notify.c b/src/xfpm-notify.c
index 9b485aa..e4fd548 100644
--- a/src/xfpm-notify.c
+++ b/src/xfpm-notify.c
@@ -69,7 +69,7 @@ struct XfpmNotifyPrivate
     gulong		notify_id;
     
     gboolean	        supports_actions;
-    gboolean		supports_sync; /*For x-canonical-private-synchronous */
+    gboolean		supports_sync; /* For x-canonical-private-synchronous */
 };
 
 enum
-- 
1.7.11.7



More information about the Xfce4-dev mailing list