/** * gpm_backlight_button_pressed_cb: * @power: The power class instance * @type: The button type, e.g. "power" * @state: The state, where TRUE is depressed or closed * @brightness: This class instance **/ static void gpm_backlight_button_pressed_cb (GpmButton *button, const gchar *type, GpmBacklight *backlight) { gboolean ret; GError *error = NULL; guint percentage; gboolean hw_changed; egg_debug ("Button press event type=%s", type); if (g_strcmp0 (type, GPM_BUTTON_BRIGHT_UP) == 0) { /* go up one step */ ret = gpm_brightness_up (backlight->priv->brightness, &hw_changed); /* show the new value */ if (ret) { gpm_brightness_get (backlight->priv->brightness, &percentage); gpm_backlight_dialog_init (backlight); msd_media_keys_window_set_volume_level (MSD_MEDIA_KEYS_WINDOW (backlight->priv->popup), percentage); gpm_backlight_dialog_show (backlight); /* save the new percentage */ backlight->priv->master_percentage = percentage; } /* we emit a signal for the brightness applet */ if (ret && hw_changed) { egg_debug ("emitting brightness-changed : %i", percentage); g_signal_emit (backlight, signals [BRIGHTNESS_CHANGED], 0, percentage); } } else if (g_strcmp0 (type, GPM_BUTTON_BRIGHT_DOWN) == 0) { /* go up down step */ ret = gpm_brightness_down (backlight->priv->brightness, &hw_changed); /* show the new value */ if (ret) { gpm_brightness_get (backlight->priv->brightness, &percentage); gpm_backlight_dialog_init (backlight); msd_media_keys_window_set_volume_level (MSD_MEDIA_KEYS_WINDOW (backlight->priv->popup), percentage); gpm_backlight_dialog_show (backlight); /* save the new percentage */ backlight->priv->master_percentage = percentage; } /* we emit a signal for the brightness applet */ if (ret && hw_changed) { egg_debug ("emitting brightness-changed : %i", percentage); g_signal_emit (backlight, signals [BRIGHTNESS_CHANGED], 0, percentage); } } else if (g_strcmp0 (type, GPM_BUTTON_LID_OPEN) == 0) { /* make sure we undim when we lift the lid */ gpm_backlight_brightness_evaluate_and_set (backlight, FALSE, TRUE); /* ensure backlight is on */ ret = gpm_dpms_set_mode (backlight->priv->dpms, GPM_DPMS_MODE_ON, &error); if (!ret) { egg_warning ("failed to turn on DPMS: %s", error->message); g_error_free (error); } } }
static void test_window (void) { GtkWidget *window; window = msd_media_keys_window_new (); gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER_ALWAYS); msd_media_keys_window_set_volume_level (MSD_MEDIA_KEYS_WINDOW (window), 0); msd_media_keys_window_set_action (MSD_MEDIA_KEYS_WINDOW (window), MSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME); gtk_widget_show (window); g_timeout_add (3000, (GSourceFunc) update_state, window); }
static void msd_media_keys_window_draw_when_composited (MsdOsdWindow *osd_window, cairo_t *cr) { MsdMediaKeysWindow *window = MSD_MEDIA_KEYS_WINDOW (osd_window); switch (window->priv->action) { case MSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME: draw_action_volume (window, cr); break; case MSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM: draw_action_custom (window, cr); break; default: break; } }
/** * gpm_backlight_dialog_init: * * Initialises the popup, and makes sure that it matches the compositing of the screen. **/ static void gpm_backlight_dialog_init (GpmBacklight *backlight) { if (backlight->priv->popup != NULL && !msd_osd_window_is_valid (MSD_OSD_WINDOW (backlight->priv->popup))) { gtk_widget_destroy (backlight->priv->popup); backlight->priv->popup = NULL; } if (backlight->priv->popup == NULL) { backlight->priv->popup= msd_media_keys_window_new (); msd_media_keys_window_set_action_custom (MSD_MEDIA_KEYS_WINDOW (backlight->priv->popup), "gpm-brightness-lcd", TRUE); gtk_window_set_position (GTK_WINDOW (backlight->priv->popup), GTK_WIN_POS_NONE); } }
/** * gpm_backlight_init: * @brightness: This brightness class instance * * initialises the brightness class. NOTE: We expect laptop_panel objects * to *NOT* be removed or added during the session. * We only control the first laptop_panel object if there are more than one. **/ static void gpm_backlight_init (GpmBacklight *backlight) { backlight->priv = GPM_BACKLIGHT_GET_PRIVATE (backlight); /* record our idle time */ backlight->priv->idle_timer = g_timer_new (); /* watch for manual brightness changes (for the popup widget) */ backlight->priv->brightness = gpm_brightness_new (); g_signal_connect (backlight->priv->brightness, "brightness-changed", G_CALLBACK (brightness_changed_cb), backlight); /* we use up_client for the ac-adapter-changed signal */ backlight->priv->client = up_client_new (); g_signal_connect (backlight->priv->client, "changed", G_CALLBACK (gpm_backlight_client_changed_cb), backlight); /* gets caps */ backlight->priv->can_dim = gpm_brightness_has_hw (backlight->priv->brightness); /* watch for dim value changes */ backlight->priv->settings = g_settings_new (GPM_SETTINGS_SCHEMA); g_signal_connect (backlight->priv->settings, "changed", G_CALLBACK (gpm_settings_key_changed_cb), backlight); /* set the main brightness, this is designed to be updated if the user changes the * brightness so we can undim to the 'correct' value */ backlight->priv->master_percentage = g_settings_get_double (backlight->priv->settings, GPM_SETTINGS_BRIGHTNESS_AC); /* watch for brightness up and down buttons and also check lid state */ backlight->priv->button = gpm_button_new (); g_signal_connect (backlight->priv->button, "button-pressed", G_CALLBACK (gpm_backlight_button_pressed_cb), backlight); /* watch for idle mode changes */ backlight->priv->idle = gpm_idle_new (); g_signal_connect (backlight->priv->idle, "idle-changed", G_CALLBACK (idle_changed_cb), backlight); /* assumption */ backlight->priv->system_is_idle = FALSE; backlight->priv->idle_dim_timeout = g_settings_get_int (backlight->priv->settings, GPM_SETTINGS_IDLE_DIM_TIME); gpm_idle_set_timeout_dim (backlight->priv->idle, backlight->priv->idle_dim_timeout); /* use a visual widget */ backlight->priv->popup = msd_media_keys_window_new (); msd_media_keys_window_set_action_custom (MSD_MEDIA_KEYS_WINDOW (backlight->priv->popup), "gpm-brightness-lcd", TRUE); gtk_window_set_position (GTK_WINDOW (backlight->priv->popup), GTK_WIN_POS_NONE); /* DPMS mode poll class */ backlight->priv->dpms = gpm_dpms_new (); /* we refresh DPMS on resume */ backlight->priv->control = gpm_control_new (); g_signal_connect (backlight->priv->control, "resume", G_CALLBACK (control_resume_cb), backlight); /* Don't do dimming on inactive console */ backlight->priv->console = egg_console_kit_new (); /* sync at startup */ gpm_backlight_brightness_evaluate_and_set (backlight, FALSE, TRUE); }
/** * gpm_backlight_brightness_evaluate_and_set: **/ static gboolean gpm_backlight_brightness_evaluate_and_set (GpmBacklight *backlight, gboolean interactive, gboolean use_initial) { gfloat brightness; gfloat scale; gboolean ret; gboolean on_battery; gboolean do_laptop_lcd; gboolean enable_action; gboolean battery_reduce; gboolean hw_changed; guint value; guint old_value; if (backlight->priv->can_dim == FALSE) { egg_warning ("no dimming hardware"); return FALSE; } do_laptop_lcd = g_settings_get_boolean (backlight->priv->settings, GPM_SETTINGS_BACKLIGHT_ENABLE); if (do_laptop_lcd == FALSE) { egg_warning ("policy is no dimming"); return FALSE; } /* get the last set brightness */ brightness = backlight->priv->master_percentage / 100.0f; egg_debug ("1. main brightness %f", brightness); /* get battery status */ g_object_get (backlight->priv->client, "on-battery", &on_battery, NULL); /* reduce if on battery power if we should */ if (use_initial) { egg_debug ("Setting initial brightness level"); battery_reduce = g_settings_get_boolean (backlight->priv->settings, GPM_SETTINGS_BACKLIGHT_BATTERY_REDUCE); if (on_battery && battery_reduce) { value = g_settings_get_int (backlight->priv->settings, GPM_SETTINGS_BRIGHTNESS_DIM_BATT); if (value > 100) { egg_warning ("cannot use battery brightness value %i, correcting to 50", value); value = 50; } scale = (100 - value) / 100.0f; brightness *= scale; } else { scale = 1.0f; } egg_debug ("2. battery scale %f, brightness %f", scale, brightness); } /* reduce if system is momentarily idle */ if (!on_battery) enable_action = g_settings_get_boolean (backlight->priv->settings, GPM_SETTINGS_IDLE_DIM_AC); else enable_action = g_settings_get_boolean (backlight->priv->settings, GPM_SETTINGS_IDLE_DIM_BATT); if (enable_action && backlight->priv->system_is_idle) { value = g_settings_get_int (backlight->priv->settings, GPM_SETTINGS_IDLE_BRIGHTNESS); if (value > 100) { egg_warning ("cannot use idle brightness value %i, correcting to 50", value); value = 50; } scale = value / 100.0f; brightness *= scale; } else { scale = 1.0f; } egg_debug ("3. idle scale %f, brightness %f", scale, brightness); /* convert to percentage */ value = (guint) ((brightness * 100.0f) + 0.5); /* only do stuff if the brightness is different */ gpm_brightness_get (backlight->priv->brightness, &old_value); if (old_value == value) { egg_debug ("values are the same, no action"); return FALSE; } /* only show dialog if interactive */ if (interactive) { gpm_backlight_dialog_init (backlight); msd_media_keys_window_set_volume_level (MSD_MEDIA_KEYS_WINDOW (backlight->priv->popup), round (brightness)); gpm_backlight_dialog_show (backlight); } ret = gpm_brightness_set (backlight->priv->brightness, value, &hw_changed); /* we emit a signal for the brightness applet */ if (ret && hw_changed) { egg_debug ("emitting brightness-changed : %i", value); g_signal_emit (backlight, signals [BRIGHTNESS_CHANGED], 0, value); } return TRUE; }
static gboolean update_state (GtkWidget *window) { static int count = 0; count++; switch (count) { case 1: msd_media_keys_window_set_volume_level (MSD_MEDIA_KEYS_WINDOW (window), 50); msd_media_keys_window_set_action (MSD_MEDIA_KEYS_WINDOW (window), MSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME); gtk_widget_show (window); break; case 2: msd_media_keys_window_set_volume_level (MSD_MEDIA_KEYS_WINDOW (window), 100); msd_media_keys_window_set_action (MSD_MEDIA_KEYS_WINDOW (window), MSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME); gtk_widget_show (window); break; case 3: msd_media_keys_window_set_volume_muted (MSD_MEDIA_KEYS_WINDOW (window), TRUE); msd_media_keys_window_set_action (MSD_MEDIA_KEYS_WINDOW (window), MSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME); gtk_widget_show (window); break; case 4: msd_media_keys_window_set_action_custom (MSD_MEDIA_KEYS_WINDOW (window), "media-eject", FALSE); gtk_widget_show (window); break; case 5: msd_media_keys_window_set_volume_level (MSD_MEDIA_KEYS_WINDOW (window), 0); msd_media_keys_window_set_action_custom (MSD_MEDIA_KEYS_WINDOW (window), "gpm-brightness-lcd", TRUE); gtk_widget_show (window); break; case 6: msd_media_keys_window_set_volume_level (MSD_MEDIA_KEYS_WINDOW (window), 50); msd_media_keys_window_set_action_custom (MSD_MEDIA_KEYS_WINDOW (window), "gpm-brightness-lcd", TRUE); gtk_widget_show (window); break; case 7: msd_media_keys_window_set_volume_level (MSD_MEDIA_KEYS_WINDOW (window), 100); msd_media_keys_window_set_action_custom (MSD_MEDIA_KEYS_WINDOW (window), "gpm-brightness-lcd", TRUE); gtk_widget_show (window); break; default: gtk_main_quit (); break; } return TRUE; }