--- bla/gnome-power-manager-2.27.5/src/gpm-popup-window.c 2009-07-23 13:15:48.000000000 +0200 +++ gnome-power-manager-2.27.5/src/gpm-popup-window.c 2009-08-14 13:45:16.000000000 +0200 @@ -25,10 +25,12 @@ #include #include #include +#include #include "egg-debug.h" #include "gpm-popup-window.h" +#include "gpm-stock-icons.h" #define GPM_POPUP_WINDOW_DIALOG_TIMEOUT 2000 /* dialog timeout in ms */ #define GPM_POPUP_WINDOW_DIALOG_FADE_TIMEOUT 1500 /* timeout before fade starts */ @@ -50,10 +52,31 @@ GtkImage *image; GtkWidget *progress; GtkWidget *frame; + NotifyNotification *n; }; G_DEFINE_TYPE (GpmPopupWindow, gpm_popup_window, GTK_TYPE_WINDOW) +static gboolean +_check_notification_server () +{ + gboolean supports_sync = FALSE; + GList *caps = NULL; + + caps = notify_get_server_caps (); + if (caps != NULL) { + if (g_list_find_custom (caps, + "x-canonical-private-synchronous", + (GCompareFunc) g_strcmp0) != NULL) + supports_sync = TRUE; + + g_list_foreach(caps, (GFunc)g_free, NULL); + g_list_free (caps); + } + + return supports_sync; +} + /** * gpm_popup_window_fade_timeout_cb: **/ @@ -167,10 +190,53 @@ void gpm_popup_window_set_value (GpmPopupWindow *popup, gfloat level) { + 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 + }; + int i; + g_return_if_fail (GPM_IS_POPUP_WINDOW (popup)); if (popup->priv->value != level) { + popup->priv->value = level; + + i = 4 * popup->priv->value + 1; + + if (popup->priv->value < 0) + i = 0; + else if (i < 1) + i = 1; + else if (i > 4) + i = 4; + + if (_check_notification_server ()) { + notify_notification_set_hint_int32 (popup->priv->n, + "value", + popup->priv->value * + 100); + + if (!g_strcmp0 (popup->priv->icon_name, + GPM_STOCK_BRIGHTNESS_LCD)) { + notify_notification_set_hint_string ( + popup->priv->n, + "x-canonical-private-synchronous", + "brightness"); + notify_notification_update ( + popup->priv->n, + " ", + "", + display_icon_name[i]); + } + + notify_notification_show (popup->priv->n, NULL); + } + gpm_popup_window_update_window (popup); /* set value straight away */ @@ -575,6 +641,8 @@ popup = GPM_POPUP_WINDOW (object); popup->priv = GPM_POPUP_WINDOW_GET_PRIVATE (popup); + g_object_unref (popup->priv->n); + g_free (popup->priv->icon_name); if (popup->priv->hide_timeout_id != 0) g_source_remove (popup->priv->hide_timeout_id); @@ -689,6 +757,11 @@ popup->priv->fade_out_alpha = 1.0; popup->priv->frame = NULL; + if (!notify_is_initted()) + notify_init ("gnome-power-manager"); + + popup->priv->n = notify_notification_new (" ", "", NULL, NULL); + screen = gtk_widget_get_screen (GTK_WIDGET (popup)); popup->priv->is_composited = gdk_screen_is_composited (screen); --- bla/gnome-power-manager-2.27.5/src/gpm-backlight.c 2009-07-23 13:15:48.000000000 +0200 +++ gnome-power-manager-2.27.5/src/gpm-backlight.c 2009-08-14 13:46:23.000000000 +0200 @@ -195,6 +195,8 @@ gboolean hw_changed; guint value; guint old_value; + gboolean brightness_at_0; + gboolean brightness_at_100; if (backlight->priv->can_dim == FALSE) { egg_warning ("no dimming hardware"); @@ -209,6 +211,8 @@ /* get the last set brightness */ brightness = backlight->priv->master_percentage / 100.0f; + brightness_at_0 = brightness == 0.0f ? TRUE : FALSE; + brightness_at_100 = brightness == 1.0f ? TRUE : FALSE; egg_debug ("1. main brightness %f", brightness); /* get battery status */ @@ -261,8 +265,20 @@ /* only show dialog if interactive */ if (interactive) { - gpm_popup_window_set_value (GPM_POPUP_WINDOW (backlight->priv->popup), (float) brightness); - gtk_widget_show (backlight->priv->popup); + if (brightness_at_0 && brightness == 0.0f) + gpm_popup_window_set_value (GPM_POPUP_WINDOW ( + backlight->priv->popup), + -0.01f); + else if (brightness_at_100 && brightness == 1.0f) + gpm_popup_window_set_value (GPM_POPUP_WINDOW ( + backlight->priv->popup), + 1.01f); + else { + gpm_popup_window_set_value (GPM_POPUP_WINDOW ( + backlight->priv->popup), + (float) brightness); + //gtk_widget_show (backlight->priv->popup); + } } ret = gpm_brightness_set (backlight->priv->brightness, value, &hw_changed); @@ -343,8 +359,15 @@ GError *error = NULL; guint percentage; gboolean hw_changed; + gboolean percentage_at_0; + gboolean percentage_at_100; + egg_debug ("Button press event type=%s", type); + gpm_brightness_get (backlight->priv->brightness, &percentage); + percentage_at_0 = percentage == 0 ? TRUE : FALSE; + percentage_at_100 = percentage == 100 ? TRUE : FALSE; + if (strcmp (type, GPM_BUTTON_BRIGHT_UP) == 0) { /* go up one step */ ret = gpm_brightness_up (backlight->priv->brightness, &hw_changed); @@ -352,8 +375,15 @@ /* show the new value */ if (ret) { gpm_brightness_get (backlight->priv->brightness, &percentage); - gpm_popup_window_set_value (GPM_POPUP_WINDOW (backlight->priv->popup), (gfloat) percentage/100.0f); - gtk_widget_show (backlight->priv->popup); + if (percentage_at_100) + gpm_popup_window_set_value (GPM_POPUP_WINDOW ( + backlight->priv->popup), 1.01f); + else + gpm_popup_window_set_value (GPM_POPUP_WINDOW ( + backlight->priv->popup), + (float) percentage/100.0f); + + //gtk_widget_show (backlight->priv->popup); /* save the new percentage */ backlight->priv->master_percentage = percentage; } @@ -369,8 +399,15 @@ /* show the new value */ if (ret) { gpm_brightness_get (backlight->priv->brightness, &percentage); - gpm_popup_window_set_value (GPM_POPUP_WINDOW (backlight->priv->popup), (gfloat) percentage/100.0f); - gtk_widget_show (backlight->priv->popup); + if (percentage_at_0) + gpm_popup_window_set_value (GPM_POPUP_WINDOW ( + backlight->priv->popup), -0.01f); + else + gpm_popup_window_set_value (GPM_POPUP_WINDOW ( + backlight->priv->popup), + (float) percentage/100.0f); + + //gtk_widget_show (backlight->priv->popup); /* save the new percentage */ backlight->priv->master_percentage = percentage; }