~ubuntu-branches/ubuntu/karmic/gnome-power-manager/karmic-updates

« back to all changes in this revision

Viewing changes to src/gpm-backlight.c

  • Committer: Bazaar Package Importer
  • Author(s): Chris Coulson
  • Date: 2009-07-07 23:53:51 UTC
  • mfrom: (2.1.41 upstream)
  • Revision ID: james.westby@ubuntu.com-20090707235351-lpmrb0epbepo42i0
Tags: 2.27.2-0ubuntu1
* New upstream release (LP: #396437):
  - Use composite battery mode by default to fix multi-battery 
    laptops (Richard Hughes).
  - Add manager policy to change the disk spindown based on timeouts 
    set in GConf (Richard Hughes).
  - Add GConf keys for the disk spindown functionality (Richard Hughes).
  - Add preferences checkboxes for the disk spindown functionality 
    (Richard Hughes).
  - No longer support HAL legacy buttons (Richard Hughes).
  - Add support for recall data provided by DeviceKit-power 
    (Richard Hughes).
  - Prefix GTKBuilder files with gettext/glade (Claude Paroz)
  - Use gtk_show_uri i.s.o. gnome-open (Jaap A. Haitsma)
  - Remove -Wunitialized because it does not compile on Ubuntu Jaunty 
    (Jaap A. Haitsma)
  - Fix the category in the gnome-power-statistic desktop file. 
    Fixes rh#489041 (Richard Hughes)
  - Make minimum size of th statistics graphs smaller. Fixes rh#491426 
    (Richard Hughes)
  - Don't show the feedback widget when the brightness changes, 
    only on key press and when interactive (Richard Hughes)
  - If we caught our idletime alarm, then remove from the filter 
    (Richard Hughes)
  - Take the battery capacity into account when using multiple 
    batteries (Richard Hughes)
  - Ignore capacity readings of less than 1% (Richard Hughes)
  - Show a label to the user when there is no graph data (Richard Hughes)
  - Add statistics devices in visually pleasing order (Richard Hughes)
  - Use the composite device for getting the global system warning icon 
    (Richard Hughes)
  - Setup the reset event before we do the idle action, to finally fix 
    blanking (Richard Hughes)
  - Be more paranoid about setting idle in a race (Richard Hughes)
  - Remove three unused GConf keys (Richard Hughes)
  - Don't show the whole object path in the GUI, just show the ID
    (Richard Hughes)
  - Only print the DeviceKit device if we are using --verbose 
    (Richard Hughes)
  - Remove a little bit more of our HAL dep, and use the lid-is-present 
    DK-p property (Richard Hughes)
  - Fix compile with DKP_DISABLE_DEPRECATED turned on (Richard Hughes)
  - Remove ambient light sensor support, and keyboard backlight devices 
    (Richard Hughes)
  - Support DKP_DEVICE_STATE_PENDING_x in more places (Richard Hughes)
* Refreshed patches:
  - 03-system-policy.patch.
  - 14_inhibit_tool.patch.
  - 21_idle_key_removal.patch.
  - 22_xfce_desktop_files.patch.
  - 23_numlock_hotkey.patch.
  - 25_sparc_char_to_int.patch.
  - 74-disable-quirks-reference.patch.
  - 97_remove-discharging-notify.patch.
* Dropped 94-fix-light-sensor-scaling.patch: the ambient light sensor
  support has gone now.

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
#include <gconf/gconf-client.h>
43
43
#include <devkit-power-gobject/devicekit-power.h>
44
44
 
45
 
#include <hal-manager.h>
46
 
 
47
45
#include "gpm-button.h"
48
46
#include "gpm-backlight.h"
49
47
#include "gpm-brightness.h"
53
51
#include "gpm-feedback-widget.h"
54
52
#include "gpm-dpms.h"
55
53
#include "gpm-idle.h"
56
 
#include "gpm-light-sensor.h"
57
54
#include "gpm-marshal.h"
58
55
#include "gpm-stock-icons.h"
59
56
#include "gpm-prefs-server.h"
70
67
        GpmControl              *control;
71
68
        GpmDpms                 *dpms;
72
69
        GpmIdle                 *idle;
73
 
        GpmLightSensor          *light_sensor;
74
70
        gboolean                 can_dim;
75
 
        gboolean                 can_sense;
76
 
        gboolean                 is_laptop;
77
71
        gboolean                 system_is_idle;
78
72
        GTimer                  *idle_timer;
79
 
        gfloat                   ambient_sensor_value;
80
73
        guint                    idle_dim_timeout;
81
74
        guint                    master_percentage;
82
75
};
218
211
        brightness = backlight->priv->master_percentage / 100.0f;
219
212
        egg_debug ("1. main brightness %f", brightness);
220
213
 
221
 
        /* get AC status */
222
 
        on_battery = dkp_client_on_battery (backlight->priv->client);
 
214
        /* get battery status */
 
215
        g_object_get (backlight->priv->client,
 
216
                      "on-battery", &on_battery,
 
217
                      NULL);
223
218
 
224
219
        /* reduce if on battery power if we should */
225
220
        battery_reduce = gconf_client_get_bool (backlight->priv->conf, GPM_CONF_BACKLIGHT_BATTERY_REDUCE, NULL);
254
249
        }
255
250
        egg_debug ("3. idle scale %f, brightness %f", scale, brightness);
256
251
 
257
 
        /* reduce if ambient is low */
258
 
        enable_action = gconf_client_get_bool (backlight->priv->conf, GPM_CONF_AMBIENT_ENABLE, NULL);
259
 
        if (backlight->priv->can_sense && enable_action) {
260
 
                value = gconf_client_get_int (backlight->priv->conf, GPM_CONF_AMBIENT_SCALE, NULL);
261
 
                scale = backlight->priv->ambient_sensor_value * (value / 100.0f);
262
 
                value = gconf_client_get_int (backlight->priv->conf, GPM_CONF_AMBIENT_FACTOR, NULL);
263
 
                scale = gpm_common_sum_scale (brightness, scale, value / 100.0f);
264
 
                if (scale > 1.0f) {
265
 
                        scale = 1.0f;
266
 
                }
267
 
                if (scale < 0.80f) {
268
 
                        brightness *= scale;
269
 
                } else {
270
 
                        scale = 1.0f;
271
 
                }
272
 
        } else {
273
 
                scale = 1.0f;
274
 
        }
275
 
        egg_debug ("4. ambient scale %f, brightness %f", scale, brightness);
276
 
 
277
252
        /* convert to percentage */
278
253
        value = (guint) ((brightness * 100.0f) + 0.5);
279
254
 
312
287
        if (value == NULL)
313
288
                return;
314
289
 
315
 
        on_battery = dkp_client_on_battery (backlight->priv->client);
 
290
        /* get battery status */
 
291
        g_object_get (backlight->priv->client,
 
292
                      "on-battery", &on_battery,
 
293
                      NULL);
316
294
 
317
295
        if (!on_battery && strcmp (entry->key, GPM_CONF_BACKLIGHT_BRIGHTNESS_AC) == 0) {
318
296
                backlight->priv->master_percentage = gconf_value_get_int (value);
322
300
                gpm_backlight_brightness_evaluate_and_set (backlight, FALSE);
323
301
 
324
302
        } else if (strcmp (entry->key, GPM_CONF_BACKLIGHT_IDLE_DIM_AC) == 0 ||
325
 
                 strcmp (entry->key, GPM_CONF_AMBIENT_ENABLE) == 0 ||
326
 
                 strcmp (entry->key, GPM_CONF_AMBIENT_FACTOR) == 0 ||
327
 
                 strcmp (entry->key, GPM_CONF_AMBIENT_SCALE) == 0 ||
328
303
                 strcmp (entry->key, GPM_CONF_BACKLIGHT_ENABLE) == 0 ||
329
304
                 strcmp (entry->key, GPM_CONF_TIMEOUT_SLEEP_DISPLAY_BATT) == 0 ||
330
305
                 strcmp (entry->key, GPM_CONF_BACKLIGHT_BATTERY_REDUCE) == 0 ||
518
493
                gpm_backlight_brightness_evaluate_and_set (backlight, FALSE);
519
494
 
520
495
                /* get the DPMS state we're supposed to use on the power state */
521
 
                on_battery = dkp_client_on_battery (backlight->priv->client);
 
496
                g_object_get (backlight->priv->client,
 
497
                              "on-battery", &on_battery,
 
498
                              NULL);
522
499
                if (!on_battery)
523
500
                        dpms_method = gconf_client_get_string (backlight->priv->conf, GPM_CONF_BACKLIGHT_DPMS_METHOD_AC, NULL);
524
501
                else
555
532
static void
556
533
brightness_changed_cb (GpmBrightness *brightness, guint percentage, GpmBacklight *backlight)
557
534
{
558
 
        /* display the widget when something else changed the backlight */
559
 
        egg_debug ("Need to display backlight feedback value %i", percentage);
560
 
        gpm_feedback_display_value (backlight->priv->feedback, (float) percentage / 100.0f);
561
 
 
562
535
        /* save the new percentage */
563
536
        backlight->priv->master_percentage = percentage;
564
537
 
568
541
}
569
542
 
570
543
/**
571
 
 * brightness_changed_cb:
572
 
 * @brightness: The GpmBrightness class instance
573
 
 * @percentage: The new percentage brightness
574
 
 * @brightness: This class instance
575
 
 *
576
 
 * This callback is called when the brightness value changes.
577
 
 **/
578
 
static void
579
 
sensor_changed_cb (GpmLightSensor *sensor, guint percentage, GpmBacklight *backlight)
580
 
{
581
 
        egg_debug ("sensor changed! %i", percentage);
582
 
        backlight->priv->ambient_sensor_value = percentage / 100.0f;
583
 
        gpm_backlight_brightness_evaluate_and_set (backlight, FALSE);
584
 
}
585
 
 
586
 
/**
587
544
 * control_resume_cb:
588
545
 * @control: The control class instance
589
546
 * @power: This power class instance
619
576
 
620
577
        g_object_unref (backlight->priv->dpms);
621
578
        g_object_unref (backlight->priv->control);
622
 
        g_object_unref (backlight->priv->light_sensor);
623
579
        g_object_unref (backlight->priv->feedback);
624
580
        g_object_unref (backlight->priv->conf);
625
581
        g_object_unref (backlight->priv->client);
663
619
static void
664
620
gpm_backlight_init (GpmBacklight *backlight)
665
621
{
666
 
        HalManager *hal_manager;
667
 
        guint value;
 
622
        gboolean lid_is_present = TRUE;
668
623
        GpmPrefsServer *prefs_server;
669
624
 
670
625
        backlight->priv = GPM_BACKLIGHT_GET_PRIVATE (backlight);
672
627
        /* record our idle time */
673
628
        backlight->priv->idle_timer = g_timer_new ();
674
629
 
675
 
        /* this has a delay.. */
676
 
        backlight->priv->light_sensor = gpm_light_sensor_new ();
677
 
        g_signal_connect (backlight->priv->light_sensor, "sensor-changed",
678
 
                          G_CALLBACK (sensor_changed_cb), backlight);
679
 
 
680
630
        /* watch for manual brightness changes (for the feedback widget) */
681
631
        backlight->priv->brightness = gpm_brightness_new ();
682
632
        g_signal_connect (backlight->priv->brightness, "brightness-changed",
683
633
                          G_CALLBACK (brightness_changed_cb), backlight);
684
634
 
 
635
        /* we use dkp_client for the ac-adapter-changed signal */
 
636
        backlight->priv->client = dkp_client_new ();
 
637
        g_signal_connect (backlight->priv->client, "changed",
 
638
                          G_CALLBACK (gpm_backlight_client_changed_cb), backlight);
 
639
 
685
640
        /* gets caps */
686
641
        backlight->priv->can_dim = gpm_brightness_has_hw (backlight->priv->brightness);
687
 
        backlight->priv->can_sense = gpm_light_sensor_has_hw (backlight->priv->light_sensor);
688
642
 
689
 
        /* we use hal to see if we are a laptop */
690
 
        hal_manager = hal_manager_new ();
691
 
        backlight->priv->is_laptop = hal_manager_is_laptop (hal_manager);
692
 
        g_object_unref (hal_manager);
 
643
        /* we use DeviceKit-power to see if we should show the lid UI */
 
644
#if DKP_CHECK_VERSION(0x009)
 
645
        g_object_get (backlight->priv->client,
 
646
                      "lid-is-present", &lid_is_present,
 
647
                      NULL);
 
648
#endif
693
649
 
694
650
        /* expose ui in prefs program */
695
651
        prefs_server = gpm_prefs_server_new ();
696
 
        if (backlight->priv->is_laptop)
 
652
        if (lid_is_present)
697
653
                gpm_prefs_server_set_capability (prefs_server, GPM_PREFS_SERVER_LID);
698
654
        if (backlight->priv->can_dim)
699
655
                gpm_prefs_server_set_capability (prefs_server, GPM_PREFS_SERVER_BACKLIGHT);
700
 
        if (backlight->priv->can_sense)
701
 
                gpm_prefs_server_set_capability (prefs_server, GPM_PREFS_SERVER_AMBIENT);
702
656
        g_object_unref (prefs_server);
703
657
 
704
658
        /* watch for dim value changes */
719
673
        g_signal_connect (backlight->priv->button, "button-pressed",
720
674
                          G_CALLBACK (gpm_backlight_button_pressed_cb), backlight);
721
675
 
722
 
        /* we use dkp_client for the ac-adapter-changed signal */
723
 
        backlight->priv->client = dkp_client_new ();
724
 
        g_signal_connect (backlight->priv->client, "changed",
725
 
                          G_CALLBACK (gpm_backlight_client_changed_cb), backlight);
726
 
 
727
676
        /* watch for idle mode changes */
728
677
        backlight->priv->idle = gpm_idle_new ();
729
678
        g_signal_connect (backlight->priv->idle, "idle-changed",
748
697
                          G_CALLBACK (control_resume_cb), backlight);
749
698
 
750
699
        /* sync at startup */
751
 
        gpm_light_sensor_get_absolute (backlight->priv->light_sensor, &value);
752
 
        backlight->priv->ambient_sensor_value = value / 100.0f;
753
700
        gpm_backlight_brightness_evaluate_and_set (backlight, FALSE);
754
701
}
755
702