~ubuntu-branches/ubuntu/precise/xfce4-power-manager/precise

« back to all changes in this revision

Viewing changes to src/xfpm-brightness-widget.c

  • Committer: Bazaar Package Importer
  • Author(s): Lionel Le Folgoc
  • Date: 2009-10-02 20:15:41 UTC
  • mfrom: (6.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20091002201541-ognqyxyov51epj84
Tags: 0.8.4-1ubuntu1
* New upstream bugfix release (LP: #438754), merge from Debian unstable,
  remaining Ubuntu changes:
  - debian/patches:
    + xubuntu-use-notification-icons.patch: use our notification-* icons for
      notification bubbles instead of the normal ones LP: #437374
    + 10_pc.patch: added patched files to POTFILES.skip
    + series: created, with these two patches
  - debian/rules: add --with quilt
  - debian/control: build-depends on quilt (>= 0.46-7).

Show diffs side-by-side

added added

removed removed

Lines of Context:
57
57
    guint                level;
58
58
    guint                max_level;
59
59
    gulong               timeout_id;
 
60
    gulong               destroy_id;
60
61
    
61
62
    gboolean             check_server_caps;
62
63
    gboolean             notify_osd;
144
145
}
145
146
 
146
147
static void
147
 
xfpm_brightness_widget_class_init (XfpmBrightnessWidgetClass *klass)
148
 
{
149
 
    GObjectClass *object_class = G_OBJECT_CLASS (klass);
150
 
 
151
 
    object_class->finalize = xfpm_brightness_widget_finalize;
152
 
    
153
 
    g_type_class_add_private (klass, sizeof (XfpmBrightnessWidgetPrivate));
154
 
}
155
 
 
156
 
static void
157
 
xfpm_brightness_widget_init (XfpmBrightnessWidget *widget)
 
148
xfpm_brightness_widget_create_popup (XfpmBrightnessWidget *widget)
158
149
{
159
150
    GtkWidget *vbox;
160
151
    GtkWidget *img;
161
152
    GtkWidget *align;
162
 
    
163
 
    widget->priv = XFPM_BRIGHTNESS_WIDGET_GET_PRIVATE (widget);
164
 
    
165
 
    widget->priv->monitor = xfpm_dbus_monitor_new ();
166
 
    
167
 
    widget->priv->level  = 0;
168
 
    widget->priv->max_level = 0;
169
 
    widget->priv->timeout_id = 0;
170
 
    widget->priv->notify_osd = FALSE;
171
 
    widget->priv->check_server_caps = TRUE;
172
 
    
173
 
    xfpm_dbus_monitor_add_service (widget->priv->monitor, 
174
 
                                   DBUS_BUS_SESSION,
175
 
                                   "org.freedesktop.Notifications");
176
 
    
177
 
    widget->priv->sig_1 = g_signal_connect (widget->priv->monitor, "service-connection-changed",
178
 
                                            G_CALLBACK (xfpm_brightness_widget_service_connection_changed_cb),
179
 
                                            widget);
180
 
    
 
153
    GtkObject *adj;
 
154
    
 
155
    if ( widget->priv->window != NULL )
 
156
        return;
 
157
        
181
158
    widget->priv->window = gtk_window_new (GTK_WINDOW_POPUP);
182
159
 
183
160
    g_object_set (G_OBJECT (widget->priv->window), 
204
181
    
205
182
    widget->priv->progress_bar = gtk_progress_bar_new ();
206
183
    
 
184
    adj = gtk_adjustment_new (0., 0., widget->priv->max_level, 1., 0., 0.);
 
185
 
 
186
    g_object_set (G_OBJECT (widget->priv->progress_bar),
 
187
                  "adjustment", adj,
 
188
                  NULL);
 
189
    
207
190
    gtk_box_pack_start (GTK_BOX (vbox), widget->priv->progress_bar, TRUE, TRUE, 0);
208
191
    
209
192
    gtk_widget_show_all (align);
210
 
    
211
 
    widget->priv->n = notify_notification_new (" ",
212
 
                                               "",
213
 
                                               NULL,
214
 
                                               NULL);
215
 
                                               
 
193
}
 
194
 
 
195
static void
 
196
xfpm_brightness_widget_create_notification (XfpmBrightnessWidget *widget)
 
197
{
 
198
    if ( widget->priv->n == NULL )
 
199
    {
 
200
        widget->priv->n = notify_notification_new (" ",
 
201
                                                   "",
 
202
                                                   NULL,
 
203
                                                   NULL);
 
204
    }
 
205
}
 
206
 
 
207
static gboolean
 
208
xfpm_brightness_widget_destroy (gpointer data)
 
209
{
 
210
    XfpmBrightnessWidget *widget;
 
211
    
 
212
    widget = XFPM_BRIGHTNESS_WIDGET (data);
 
213
    
 
214
    if ( widget->priv->window )
 
215
    {
 
216
        gtk_widget_destroy (widget->priv->window);
 
217
        widget->priv->window = NULL;
 
218
    }
 
219
    
 
220
    
 
221
    if ( widget->priv->n )
 
222
    {
 
223
        g_object_unref (widget->priv->n);
 
224
        widget->priv->n = NULL;
 
225
    }
 
226
    
 
227
    return FALSE;
 
228
}
 
229
 
 
230
static void
 
231
xfpm_brightness_widget_class_init (XfpmBrightnessWidgetClass *klass)
 
232
{
 
233
    GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
234
 
 
235
    object_class->finalize = xfpm_brightness_widget_finalize;
 
236
    
 
237
    g_type_class_add_private (klass, sizeof (XfpmBrightnessWidgetPrivate));
 
238
}
 
239
 
 
240
static void
 
241
xfpm_brightness_widget_init (XfpmBrightnessWidget *widget)
 
242
{
 
243
    widget->priv = XFPM_BRIGHTNESS_WIDGET_GET_PRIVATE (widget);
 
244
    
 
245
    widget->priv->monitor = xfpm_dbus_monitor_new ();
 
246
    
 
247
    widget->priv->level  = 0;
 
248
    widget->priv->max_level = 0;
 
249
    widget->priv->timeout_id = 0;
 
250
    widget->priv->destroy_id = 0;
 
251
    widget->priv->notify_osd = FALSE;
 
252
    widget->priv->check_server_caps = TRUE;
 
253
    widget->priv->window = NULL;
 
254
    widget->priv->progress_bar = NULL;
 
255
    widget->priv->n = NULL;
 
256
    
 
257
    xfpm_dbus_monitor_add_service (widget->priv->monitor, 
 
258
                                   DBUS_BUS_SESSION,
 
259
                                   "org.freedesktop.Notifications");
 
260
    
 
261
    widget->priv->sig_1 = g_signal_connect (widget->priv->monitor, "service-connection-changed",
 
262
                                            G_CALLBACK (xfpm_brightness_widget_service_connection_changed_cb),
 
263
                                            widget);
216
264
}
217
265
 
218
266
static void
225
273
    if ( g_signal_handler_is_connected (G_OBJECT (widget->priv->monitor), widget->priv->sig_1) )
226
274
        g_signal_handler_disconnect (G_OBJECT (widget->priv->monitor), widget->priv->sig_1);
227
275
        
228
 
    g_object_unref (widget->priv->n);
 
276
    xfpm_brightness_widget_destroy (widget);
 
277
    
229
278
    g_object_unref (widget->priv->monitor);
230
279
 
231
 
    gtk_widget_destroy (widget->priv->window);
232
 
 
233
280
    G_OBJECT_CLASS (xfpm_brightness_widget_parent_class)->finalize (object);
234
281
}
235
282
 
236
 
XfpmBrightnessWidget *
237
 
xfpm_brightness_widget_new (void)
238
 
{
239
 
    XfpmBrightnessWidget *widget = NULL;
240
 
    widget = g_object_new (XFPM_TYPE_BRIGHTNESS_WIDGET, NULL);
241
 
 
242
 
    return widget;
243
 
}
244
 
 
245
 
void xfpm_brightness_widget_set_max_level (XfpmBrightnessWidget *widget, guint level)
246
 
{
247
 
    GtkObject *adj;
248
 
    
249
 
    g_return_if_fail (XFPM_IS_BRIGHTNESS_WIDGET (widget));
250
 
 
251
 
    adj = gtk_adjustment_new (0., 0., level, 1., 0., 0.);
252
 
 
253
 
    widget->priv->max_level = level;
254
 
    
255
 
    g_object_set (G_OBJECT (widget->priv->progress_bar),
256
 
                  "adjustment", adj,
257
 
                  NULL);
258
 
    
259
 
}
260
 
 
261
 
void xfpm_brightness_widget_set_level (XfpmBrightnessWidget *widget, guint level)
262
 
{
263
 
    GtkAdjustment *adj;
264
 
    
265
 
    g_return_if_fail (XFPM_IS_BRIGHTNESS_WIDGET (widget));
266
 
    
267
 
    widget->priv->level = level;
268
 
 
269
 
    if ( widget->priv->check_server_caps )
270
 
    {
271
 
        widget->priv->notify_osd = xfpm_brightness_widget_server_is_notify_osd ();
272
 
        widget->priv->check_server_caps = FALSE;
273
 
    }
274
 
        
 
283
static void
 
284
xfpm_brightness_widget_show (XfpmBrightnessWidget *widget)
 
285
{
275
286
    if ( widget->priv->notify_osd )
276
287
    {
 
288
        xfpm_brightness_widget_create_notification (widget);
277
289
        xfpm_brightness_widget_display_notification (widget);
278
290
    }
279
291
    else
280
292
    {
 
293
        GtkAdjustment *adj;
 
294
        
 
295
        xfpm_brightness_widget_create_popup (widget);
281
296
        g_object_get (G_OBJECT (widget->priv->progress_bar),
282
297
                      "adjustment", &adj,
283
298
                      NULL);
284
299
        
285
 
        gtk_adjustment_set_value (adj, level);
 
300
        gtk_adjustment_set_value (adj, widget->priv->level);
286
301
        
287
302
        if ( !GTK_WIDGET_VISIBLE (widget->priv->window))
288
303
            gtk_window_present (GTK_WINDOW (widget->priv->window));
293
308
        widget->priv->timeout_id = 
294
309
            g_timeout_add (900, (GSourceFunc) xfpm_brightness_widget_timeout, widget);
295
310
    }
 
311
    
 
312
    if ( widget->priv->destroy_id != 0 )
 
313
    {
 
314
        g_source_remove (widget->priv->destroy_id);
 
315
        widget->priv->destroy_id = 0;
 
316
    }
 
317
    
 
318
    /* Release the memory after 60 seconds */
 
319
    widget->priv->destroy_id = g_timeout_add_seconds (60, (GSourceFunc) xfpm_brightness_widget_destroy, widget);
 
320
}
 
321
    
 
322
 
 
323
XfpmBrightnessWidget *
 
324
xfpm_brightness_widget_new (void)
 
325
{
 
326
    XfpmBrightnessWidget *widget = NULL;
 
327
    widget = g_object_new (XFPM_TYPE_BRIGHTNESS_WIDGET, NULL);
 
328
 
 
329
    return widget;
 
330
}
 
331
 
 
332
void xfpm_brightness_widget_set_max_level (XfpmBrightnessWidget *widget, guint level)
 
333
{
 
334
    g_return_if_fail (XFPM_IS_BRIGHTNESS_WIDGET (widget));
 
335
 
 
336
    widget->priv->max_level = level;
 
337
}
 
338
 
 
339
void xfpm_brightness_widget_set_level (XfpmBrightnessWidget *widget, guint level)
 
340
{
 
341
    g_return_if_fail (XFPM_IS_BRIGHTNESS_WIDGET (widget));
 
342
    
 
343
    widget->priv->level = level;
 
344
 
 
345
    if ( widget->priv->check_server_caps )
 
346
    {
 
347
        widget->priv->notify_osd = xfpm_brightness_widget_server_is_notify_osd ();
 
348
        widget->priv->check_server_caps = FALSE;
 
349
    }
 
350
    
 
351
    xfpm_brightness_widget_show (widget);
296
352
}