~ubuntu-branches/ubuntu/natty/bamf/natty-proposed

« back to all changes in this revision

Viewing changes to lib/libbamf/bamf-view.c

  • Committer: Bazaar Package Importer
  • Author(s): Didier Roche
  • Date: 2010-11-11 18:37:42 UTC
  • mfrom: (1.1.18 upstream)
  • Revision ID: james.westby@ubuntu.com-20101111183742-jc2ep9nyyjbdej5g
Tags: 0.2.60-0ubuntu1
* new upstream release
* debian/libbamf0.symbols:
  - add the new symbols

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
#endif
36
36
 
37
37
#include "bamf-view.h"
 
38
#include "bamf-view-private.h"
38
39
#include "bamf-factory.h"
39
40
#include "bamf-window.h"
40
41
 
87
88
  DBusGProxy      *proxy;
88
89
  gchar           *path;
89
90
  gchar           *type;
 
91
  gchar           *local_icon;
 
92
  gchar           *local_name;
90
93
  guint            checked_flags;
91
94
  guint            set_flags;
92
95
  gboolean         is_closed;
 
96
  gboolean         sticky;
93
97
};
94
98
 
95
99
static void
147
151
  if (BAMF_VIEW_GET_CLASS (view)->get_children)
148
152
    return BAMF_VIEW_GET_CLASS (view)->get_children (view);
149
153
 
 
154
  if (!bamf_view_remote_ready (view))
 
155
    return NULL;
 
156
 
150
157
  priv = view->priv;
151
158
 
152
159
  if (!dbus_g_proxy_call (priv->proxy,
187
194
  if (bamf_view_flag_is_set (self, flag))
188
195
    return bamf_view_get_flag (self, flag);
189
196
 
 
197
  if (!bamf_view_remote_ready (self))
 
198
    return FALSE;
 
199
 
190
200
  if (!dbus_g_proxy_call (priv->proxy,
191
201
                          method_name,
192
202
                          &error,
255
265
  return bamf_view_get_boolean (self, "IsUrgent", BAMF_VIEW_URGENT_FLAG);
256
266
}
257
267
 
 
268
void
 
269
bamf_view_set_name (BamfView *view, const char *name)
 
270
{
 
271
  g_return_if_fail (BAMF_IS_VIEW (view));
 
272
  
 
273
  view->priv->local_name = g_strdup (name);
 
274
}
 
275
 
 
276
void
 
277
bamf_view_set_icon (BamfView *view, const char *icon)
 
278
{
 
279
  g_return_if_fail (BAMF_IS_VIEW (view));
 
280
  
 
281
  view->priv->local_icon = g_strdup (icon);
 
282
}
 
283
 
 
284
gboolean 
 
285
bamf_view_is_sticky (BamfView *view)
 
286
{
 
287
  g_return_val_if_fail (BAMF_IS_VIEW (view), FALSE);
 
288
  
 
289
  return view->priv->sticky;
 
290
}
 
291
 
 
292
void 
 
293
bamf_view_set_sticky (BamfView *view, gboolean value)
 
294
{
 
295
  g_return_if_fail (BAMF_IS_VIEW (view));
 
296
  
 
297
  if (value == view->priv->sticky)
 
298
    return;
 
299
  
 
300
  if (value)
 
301
    g_object_ref (view);
 
302
  else
 
303
    g_object_unref (view);
 
304
  
 
305
  
 
306
  view->priv->sticky = value;
 
307
}
258
308
 
259
309
gchar *
260
310
bamf_view_get_icon (BamfView *self)
269
319
  if (BAMF_VIEW_GET_CLASS (self)->get_icon)
270
320
    return BAMF_VIEW_GET_CLASS (self)->get_icon (self);
271
321
 
 
322
  if (!bamf_view_remote_ready (self))
 
323
    return priv->local_icon;
 
324
 
272
325
  if (!dbus_g_proxy_call (priv->proxy,
273
326
                          "Icon",
274
327
                          &error,
297
350
  
298
351
  if (BAMF_VIEW_GET_CLASS (self)->get_name)
299
352
    return BAMF_VIEW_GET_CLASS (self)->get_name (self);
 
353
 
 
354
  if (!bamf_view_remote_ready (self))
 
355
    return priv->local_name;
300
356
    
301
357
  if (!dbus_g_proxy_call (priv->proxy,
302
358
                          "Name",
314
370
  return name;
315
371
}
316
372
 
 
373
gboolean 
 
374
bamf_view_remote_ready (BamfView *view)
 
375
{
 
376
  return BAMF_IS_VIEW (view) && view->priv->proxy;
 
377
}
 
378
 
317
379
const gchar *
318
380
bamf_view_get_view_type (BamfView *self)
319
381
{
337
399
                          G_TYPE_STRING, &type,
338
400
                          G_TYPE_INVALID))
339
401
    {
340
 
      g_warning ("Failed to fetch view type: %s", error->message);
 
402
      g_warning ("Failed to fetch view type at %s: %s", dbus_g_proxy_get_path (priv->proxy), error->message);
341
403
      g_error_free (error);
342
404
      return NULL;
343
405
    }
346
408
  return type;
347
409
}
348
410
 
349
 
static void
350
 
bamf_view_on_closed (DBusGProxy *proxy, BamfView *self)
 
411
BamfClickBehavior 
 
412
bamf_view_get_click_suggestion (BamfView *self)
351
413
{
352
 
  self->priv->is_closed = TRUE;
353
 
  g_signal_emit (G_OBJECT (self), view_signals[CLOSED], 0);
 
414
  g_return_val_if_fail (BAMF_IS_VIEW (self), BAMF_CLICK_BEHAVIOR_NONE);
 
415
 
 
416
  if (BAMF_VIEW_GET_CLASS (self)->click_behavior)
 
417
    return BAMF_VIEW_GET_CLASS (self)->click_behavior (self);
 
418
    
 
419
  return BAMF_CLICK_BEHAVIOR_NONE;
354
420
}
355
421
 
356
422
static void
410
476
}
411
477
 
412
478
static void
 
479
bamf_view_on_closed (DBusGProxy *proxy, BamfView *self)
 
480
{
 
481
  BamfViewPrivate *priv;
 
482
  
 
483
  priv = self->priv;
 
484
 
 
485
  priv->is_closed = TRUE;
 
486
  
 
487
  if (priv->sticky && priv->proxy)
 
488
    {
 
489
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
490
                                      "ActiveChanged",
 
491
                                      (GCallback) bamf_view_on_active_changed,
 
492
                                      self);
 
493
 
 
494
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
495
                                      "Closed",
 
496
                                      (GCallback) bamf_view_on_closed,
 
497
                                      self);
 
498
 
 
499
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
500
                                      "ChildAdded",
 
501
                                      (GCallback) bamf_view_on_child_added,
 
502
                                      self);
 
503
 
 
504
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
505
                                      "ChildRemoved",
 
506
                                      (GCallback) bamf_view_on_child_removed,
 
507
                                      self);
 
508
 
 
509
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
510
                                      "RunningChanged",
 
511
                                      (GCallback) bamf_view_on_running_changed,
 
512
                                      self);
 
513
 
 
514
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
515
                                     "UrgentChanged",
 
516
                                     (GCallback) bamf_view_on_urgent_changed,
 
517
                                     self);
 
518
  
 
519
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
520
                                     "UserVisibleChanged",
 
521
                                     (GCallback) bamf_view_on_user_visible_changed,
 
522
                                     self);
 
523
      g_object_unref (priv->proxy);
 
524
      priv->proxy = NULL;
 
525
    }
 
526
  
 
527
  g_signal_emit (G_OBJECT (self), view_signals[CLOSED], 0);
 
528
  
 
529
  if (priv->path)
 
530
  {
 
531
    g_free (priv->path);
 
532
    priv->path = NULL;
 
533
  }
 
534
}
 
535
 
 
536
static void
413
537
bamf_view_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
414
538
{
415
539
  BamfView *self;
418
542
 
419
543
  switch (property_id)
420
544
    {
421
 
      case PROP_PATH:
422
 
        self->priv->path = g_value_dup_string (value);
423
 
 
424
 
        break;
425
 
        
426
545
      default:
427
546
        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
428
547
    }
526
645
    }
527
646
}
528
647
 
529
 
static void
530
 
bamf_view_constructed (GObject *object)
531
 
{
532
 
  BamfView *view;
 
648
const char * 
 
649
bamf_view_get_path (BamfView *view)
 
650
{
 
651
  g_return_val_if_fail (BAMF_IS_VIEW (view), NULL);
 
652
  
 
653
  return view->priv->path;
 
654
}
 
655
 
 
656
void
 
657
bamf_view_set_path (BamfView *view, const char *path)
 
658
{
533
659
  BamfViewPrivate *priv;
534
660
  
535
 
  if (G_OBJECT_CLASS (bamf_view_parent_class)->constructed)
536
 
    G_OBJECT_CLASS (bamf_view_parent_class)->constructed (object);
537
 
 
538
 
  view = BAMF_VIEW (object);
539
 
 
 
661
  g_return_if_fail (BAMF_IS_VIEW (view));
 
662
  
540
663
  priv = view->priv;
 
664
  priv->is_closed = FALSE;
541
665
 
542
 
  if (priv->proxy)
 
666
  if (priv->path)
543
667
    {
544
 
      g_warning ("bamf_view_set_path called multiple times\n");
545
 
      return;
 
668
      g_free (priv->path);
546
669
    }
547
670
  
 
671
  priv->path = g_strdup (path);
548
672
  priv->proxy = dbus_g_proxy_new_for_name (priv->connection,
549
673
                                           "org.ayatana.bamf",
550
674
                                           priv->path,
630
754
                               (GCallback) bamf_view_on_user_visible_changed,
631
755
                               view,
632
756
                               NULL);
 
757
 
 
758
  if (bamf_view_is_sticky (view))
 
759
    {
 
760
      priv->checked_flags = 0x0;
 
761
      
 
762
      if (bamf_view_user_visible (view))
 
763
        {
 
764
          g_signal_emit (G_OBJECT(view), view_signals[VISIBLE_CHANGED], 0, TRUE);
 
765
          g_object_notify (G_OBJECT (view), "user-visible");
 
766
        }
 
767
      
 
768
      if (bamf_view_is_active (view))
 
769
        {
 
770
          g_signal_emit (G_OBJECT(view), view_signals[ACTIVE_CHANGED], 0, TRUE);
 
771
          g_object_notify (G_OBJECT (view), "active");
 
772
        }
 
773
      
 
774
      if (bamf_view_is_running (view))
 
775
        {
 
776
          g_signal_emit (G_OBJECT(view), view_signals[RUNNING_CHANGED], 0, TRUE);
 
777
          g_object_notify (G_OBJECT (view), "running");
 
778
        }
 
779
        
 
780
      if (bamf_view_is_urgent (view))
 
781
        {
 
782
          g_signal_emit (G_OBJECT(view), view_signals[URGENT_CHANGED], 0, TRUE);
 
783
          g_object_notify (G_OBJECT (view), "urgent");
 
784
        }
 
785
    }
 
786
  if (BAMF_VIEW_GET_CLASS (view)->set_path)
 
787
    BAMF_VIEW_GET_CLASS (view)->set_path (view, path);
 
788
}
 
789
 
 
790
static void
 
791
bamf_view_constructed (GObject *object)
 
792
{
 
793
  if (G_OBJECT_CLASS (bamf_view_parent_class)->constructed)
 
794
    G_OBJECT_CLASS (bamf_view_parent_class)->constructed (object);
633
795
}
634
796
 
635
797
static void
643
805
  obj_class->get_property = bamf_view_get_property;
644
806
  obj_class->set_property = bamf_view_set_property;
645
807
 
646
 
  pspec = g_param_spec_string ("path", "path", "path", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
 
808
  pspec = g_param_spec_string ("path", "path", "path", NULL, G_PARAM_READABLE);
647
809
  g_object_class_install_property (obj_class, PROP_PATH, pspec);
648
810
  
649
811
  pspec = g_param_spec_boolean ("active", "active", "active", FALSE, G_PARAM_READABLE);