~kroq-gar78/ubuntu/precise/gnome-control-center/fix-885947

« back to all changes in this revision

Viewing changes to panels/screen/cc-screen-panel.c

  • Committer: Bazaar Package Importer
  • Author(s): Frederic Peters
  • Date: 2011-03-21 22:30:04 UTC
  • mto: (0.3.1 experimental)
  • mto: This revision was merged to the branch mainline in revision 165.
  • Revision ID: james.westby@ubuntu.com-20110321223004-okxhalsjh51i5w62
Tags: upstream-2.91.92
ImportĀ upstreamĀ versionĀ 2.91.92

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
  GSettings     *lock_settings;
34
34
  GSettings     *gsd_settings;
35
35
  GSettings     *session_settings;
 
36
  GSettings     *lockdown_settings;
36
37
  GCancellable  *cancellable;
37
38
  GtkBuilder    *builder;
38
39
  GDBusProxy    *proxy;
86
87
      g_object_unref (priv->session_settings);
87
88
      priv->session_settings = NULL;
88
89
    }
 
90
  if (priv->lockdown_settings)
 
91
    {
 
92
      g_object_unref (priv->lockdown_settings);
 
93
      priv->lockdown_settings = NULL;
 
94
    }
89
95
  if (priv->cancellable != NULL)
90
96
    {
91
97
      g_object_unref (priv->cancellable);
123
129
}
124
130
 
125
131
static void
 
132
update_lock_screen_sensitivity (CcScreenPanel *self)
 
133
{
 
134
  GtkWidget *widget;
 
135
  gboolean   locked;
 
136
 
 
137
  widget = WID ("screen_lock_main_box");
 
138
  locked = g_settings_get_boolean (self->priv->lockdown_settings, "disable-lock-screen");
 
139
  gtk_widget_set_sensitive (widget, !locked);
 
140
}
 
141
 
 
142
static void
 
143
on_lockdown_settings_changed (GSettings     *settings,
 
144
                              const char    *key,
 
145
                              CcScreenPanel *panel)
 
146
{
 
147
  if (g_str_equal (key, "disable-lock-screen") == FALSE)
 
148
    return;
 
149
 
 
150
  update_lock_screen_sensitivity (panel);
 
151
}
 
152
 
 
153
static void
126
154
cc_screen_panel_class_init (CcScreenPanelClass *klass)
127
155
{
128
156
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
273
301
                     user_data);
274
302
}
275
303
 
276
 
static guint
277
 
lock_delay_to_relative (CcScreenPanel *self,
278
 
                        guint          value)
279
 
{
280
 
  guint new;
281
 
  guint idle_delay;
282
 
 
283
 
  if (value == 0)
284
 
    return value;
285
 
 
286
 
  /* convert to relative units */
287
 
  idle_delay = 0;
288
 
  g_settings_get (self->priv->session_settings, "idle-delay", "u", &idle_delay);
289
 
  idle_delay *= 60;
290
 
 
291
 
  if (idle_delay > value)
292
 
    new = 0;
293
 
  else
294
 
    new = value - idle_delay;
295
 
 
296
 
  return new;
297
 
}
298
 
 
299
 
static guint
300
 
lock_delay_to_absolute (CcScreenPanel *self,
301
 
                        guint          value)
302
 
{
303
 
  guint new;
304
 
  guint idle_delay;
305
 
 
306
 
  new = value;
307
 
 
308
 
  /* convert to absolute units */
309
 
  idle_delay = 0;
310
 
  g_settings_get (self->priv->session_settings, "idle-delay", "u", &idle_delay);
311
 
  idle_delay *= 60;
312
 
 
313
 
  new += idle_delay;
314
 
 
315
 
  return new;
316
 
}
317
 
 
318
304
static void
319
305
set_idle_delay_from_dpms (CcScreenPanel *self,
320
306
                          int            value)
321
307
{
322
308
  guint off_delay;
323
 
  guint lock_delay;
324
 
  guint idle_delay;
325
309
 
326
310
  off_delay = 1;
327
 
  lock_delay = 0;
328
311
 
329
312
  if (value > 0)
330
313
    off_delay = (guint) value;
331
314
 
332
 
  g_settings_get (self->priv->lock_settings, "lock-delay", "u", &lock_delay);
333
 
  /* convert to seconds */
334
 
  lock_delay *= 60;
335
 
 
336
 
  lock_delay = lock_delay_to_absolute (self, lock_delay);
337
 
 
338
 
  idle_delay = off_delay;
339
 
  if (lock_delay > 0)
340
 
    idle_delay = MIN (lock_delay, off_delay);
341
 
 
342
 
  idle_delay /= 60;
343
 
 
344
 
  g_settings_set (self->priv->session_settings, "idle-delay", "u", idle_delay);
345
 
}
346
 
 
347
 
static void
348
 
set_idle_delay_from_lock (CcScreenPanel *self,
349
 
                          guint          value)
350
 
{
351
 
  guint off_delay;
352
 
  guint idle_delay;
353
 
 
354
 
  off_delay = (guint) g_settings_get_int (self->priv->gsd_settings, "sleep-display-ac");
355
 
 
356
 
  /* special value of zero means use dpms value */
357
 
  if (value != 0)
358
 
    idle_delay = MIN (value, off_delay);
359
 
  else
360
 
    idle_delay = off_delay;
361
 
 
362
 
  idle_delay /= 60;
363
 
 
364
 
  g_settings_set (self->priv->session_settings, "idle-delay", "u", idle_delay);
 
315
  g_settings_set (self->priv->session_settings, "idle-delay", "u", off_delay);
365
316
}
366
317
 
367
318
static void
395
346
{
396
347
  GtkTreeIter iter;
397
348
  GtkTreeModel *model;
398
 
  guint relative;
399
 
  guint absolute;
 
349
  guint delay;
400
350
  gboolean ret;
401
351
 
402
352
  /* no selection */
407
357
  /* get entry */
408
358
  model = gtk_combo_box_get_model (GTK_COMBO_BOX(widget));
409
359
  gtk_tree_model_get (model, &iter,
410
 
                      1, &absolute,
 
360
                      1, &delay,
411
361
                      -1);
412
 
  relative = lock_delay_to_relative (self, absolute);
413
 
 
414
 
  /* convert to minutes */
415
 
  if (relative > 0)
416
 
    relative /= 60;
417
 
 
418
 
  g_settings_set (self->priv->lock_settings, "lock-delay", "u", relative);
419
 
 
420
 
  set_idle_delay_from_lock (self, absolute);
 
362
  g_settings_set (self->priv->lock_settings, "lock-delay", "u", delay);
421
363
}
422
364
 
423
365
static void
482
424
  /* try to make the UI match the lock setting */
483
425
  g_settings_get (self->priv->lock_settings, "lock-delay", "u", &value);
484
426
 
485
 
  /* convert to seconds */
486
 
  value *= 60;
487
 
 
488
 
  if (value > 0)
489
 
    value = lock_delay_to_absolute (self, value);
490
427
  do
491
428
    {
492
429
      gtk_tree_model_get (model, &iter,
548
485
                    self);
549
486
  self->priv->gsd_settings = g_settings_new ("org.gnome.settings-daemon.plugins.power");
550
487
  self->priv->session_settings = g_settings_new ("org.gnome.desktop.session");
 
488
  self->priv->lockdown_settings = g_settings_new ("org.gnome.desktop.lockdown");
 
489
  g_signal_connect (self->priv->lockdown_settings,
 
490
                    "changed",
 
491
                    G_CALLBACK (on_lockdown_settings_changed),
 
492
                    self);
551
493
 
552
494
  /* bind the auto dim checkbox */
553
495
  widget = WID ("screen_auto_reduce_checkbutton");
577
519
                    G_CALLBACK (lock_combo_changed_cb),
578
520
                    self);
579
521
 
 
522
  widget = WID ("screen_lock_hbox");
580
523
  g_settings_bind (self->priv->lock_settings,
581
524
                   "lock-enabled",
582
525
                   widget, "sensitive",
583
526
                   G_SETTINGS_BIND_GET);
584
527
 
 
528
  update_lock_screen_sensitivity (self);
 
529
 
585
530
  widget = WID ("screen_vbox");
586
531
  gtk_widget_reparent (widget, (GtkWidget *) self);
587
532
}