~mterry/bamf/no-show-indicators

« back to all changes in this revision

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

  • Committer: jassmith at gmail
  • Date: 2010-10-26 03:48:12 UTC
  • Revision ID: jassmith@gmail.com-20101026034812-s6dzgcyzblgnupik
add favorites support 

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
  view->priv->sticky = value;
 
298
}
258
299
 
259
300
gchar *
260
301
bamf_view_get_icon (BamfView *self)
269
310
  if (BAMF_VIEW_GET_CLASS (self)->get_icon)
270
311
    return BAMF_VIEW_GET_CLASS (self)->get_icon (self);
271
312
 
 
313
  if (!bamf_view_remote_ready (self))
 
314
    return priv->local_icon;
 
315
 
272
316
  if (!dbus_g_proxy_call (priv->proxy,
273
317
                          "Icon",
274
318
                          &error,
297
341
  
298
342
  if (BAMF_VIEW_GET_CLASS (self)->get_name)
299
343
    return BAMF_VIEW_GET_CLASS (self)->get_name (self);
 
344
 
 
345
  if (!bamf_view_remote_ready (self))
 
346
    return priv->local_name;
300
347
    
301
348
  if (!dbus_g_proxy_call (priv->proxy,
302
349
                          "Name",
314
361
  return name;
315
362
}
316
363
 
 
364
gboolean 
 
365
bamf_view_remote_ready (BamfView *view)
 
366
{
 
367
  return BAMF_IS_VIEW (view) && view->priv->proxy;
 
368
}
 
369
 
317
370
const gchar *
318
371
bamf_view_get_view_type (BamfView *self)
319
372
{
337
390
                          G_TYPE_STRING, &type,
338
391
                          G_TYPE_INVALID))
339
392
    {
340
 
      g_warning ("Failed to fetch view type: %s", error->message);
 
393
      g_warning ("Failed to fetch view type at %s: %s", dbus_g_proxy_get_path (priv->proxy), error->message);
341
394
      g_error_free (error);
342
395
      return NULL;
343
396
    }
346
399
  return type;
347
400
}
348
401
 
349
 
static void
350
 
bamf_view_on_closed (DBusGProxy *proxy, BamfView *self)
351
 
{
352
 
  self->priv->is_closed = TRUE;
353
 
  g_signal_emit (G_OBJECT (self), view_signals[CLOSED], 0);
354
 
}
355
402
 
356
403
static void
357
404
bamf_view_on_child_added (DBusGProxy *proxy, char *path, BamfView *self)
410
457
}
411
458
 
412
459
static void
 
460
bamf_view_on_closed (DBusGProxy *proxy, BamfView *self)
 
461
{
 
462
  BamfViewPrivate *priv;
 
463
  
 
464
  priv = self->priv;
 
465
 
 
466
  priv->is_closed = TRUE;
 
467
  
 
468
  if (priv->sticky && priv->proxy)
 
469
    {
 
470
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
471
                                      "ActiveChanged",
 
472
                                      (GCallback) bamf_view_on_active_changed,
 
473
                                      self);
 
474
 
 
475
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
476
                                      "Closed",
 
477
                                      (GCallback) bamf_view_on_closed,
 
478
                                      self);
 
479
 
 
480
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
481
                                      "ChildAdded",
 
482
                                      (GCallback) bamf_view_on_child_added,
 
483
                                      self);
 
484
 
 
485
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
486
                                      "ChildRemoved",
 
487
                                      (GCallback) bamf_view_on_child_removed,
 
488
                                      self);
 
489
 
 
490
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
491
                                      "RunningChanged",
 
492
                                      (GCallback) bamf_view_on_running_changed,
 
493
                                      self);
 
494
 
 
495
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
496
                                     "UrgentChanged",
 
497
                                     (GCallback) bamf_view_on_urgent_changed,
 
498
                                     self);
 
499
  
 
500
      dbus_g_proxy_disconnect_signal (priv->proxy,
 
501
                                     "UserVisibleChanged",
 
502
                                     (GCallback) bamf_view_on_user_visible_changed,
 
503
                                     self);
 
504
      g_object_unref (priv->proxy);
 
505
      priv->proxy = NULL;
 
506
    }
 
507
  
 
508
  g_signal_emit (G_OBJECT (self), view_signals[CLOSED], 0);
 
509
}
 
510
 
 
511
static void
413
512
bamf_view_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
414
513
{
415
514
  BamfView *self;
418
517
 
419
518
  switch (property_id)
420
519
    {
421
 
      case PROP_PATH:
422
 
        self->priv->path = g_value_dup_string (value);
423
 
 
424
 
        break;
425
 
        
426
520
      default:
427
521
        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
428
522
    }
526
620
    }
527
621
}
528
622
 
529
 
static void
530
 
bamf_view_constructed (GObject *object)
 
623
void
 
624
bamf_view_set_path (BamfView *view, const char *path)
531
625
{
532
 
  BamfView *view;
533
626
  BamfViewPrivate *priv;
534
627
  
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
 
 
 
628
  g_return_if_fail (BAMF_IS_VIEW (view));
 
629
  
540
630
  priv = view->priv;
 
631
  priv->is_closed = FALSE;
541
632
 
542
 
  if (priv->proxy)
 
633
  if (priv->path)
543
634
    {
544
 
      g_warning ("bamf_view_set_path called multiple times\n");
545
 
      return;
 
635
      g_free (priv->path);
546
636
    }
547
637
  
 
638
  priv->path = g_strdup (path);
548
639
  priv->proxy = dbus_g_proxy_new_for_name (priv->connection,
549
640
                                           "org.ayatana.bamf",
550
641
                                           priv->path,
630
721
                               (GCallback) bamf_view_on_user_visible_changed,
631
722
                               view,
632
723
                               NULL);
 
724
 
 
725
  if (bamf_view_is_sticky (view))
 
726
    {
 
727
      priv->checked_flags = 0x0;
 
728
      
 
729
      if (bamf_view_user_visible (view))
 
730
        {
 
731
          g_signal_emit (G_OBJECT(view), view_signals[VISIBLE_CHANGED], 0, TRUE);
 
732
          g_object_notify (G_OBJECT (view), "user-visible");
 
733
        }
 
734
      
 
735
      if (bamf_view_is_active (view))
 
736
        {
 
737
          g_signal_emit (G_OBJECT(view), view_signals[ACTIVE_CHANGED], 0, TRUE);
 
738
          g_object_notify (G_OBJECT (view), "active");
 
739
        }
 
740
      
 
741
      if (bamf_view_is_running (view))
 
742
        {
 
743
          g_signal_emit (G_OBJECT(view), view_signals[RUNNING_CHANGED], 0, TRUE);
 
744
          g_object_notify (G_OBJECT (view), "running");
 
745
        }
 
746
        
 
747
      if (bamf_view_is_urgent (view))
 
748
        {
 
749
          g_signal_emit (G_OBJECT(view), view_signals[URGENT_CHANGED], 0, TRUE);
 
750
          g_object_notify (G_OBJECT (view), "urgent");
 
751
        }
 
752
    }
 
753
  if (BAMF_VIEW_GET_CLASS (view)->set_path)
 
754
    BAMF_VIEW_GET_CLASS (view)->set_path (view, path);
 
755
}
 
756
 
 
757
static void
 
758
bamf_view_constructed (GObject *object)
 
759
{
 
760
  if (G_OBJECT_CLASS (bamf_view_parent_class)->constructed)
 
761
    G_OBJECT_CLASS (bamf_view_parent_class)->constructed (object);
633
762
}
634
763
 
635
764
static void
643
772
  obj_class->get_property = bamf_view_get_property;
644
773
  obj_class->set_property = bamf_view_set_property;
645
774
 
646
 
  pspec = g_param_spec_string ("path", "path", "path", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
 
775
  pspec = g_param_spec_string ("path", "path", "path", NULL, G_PARAM_READABLE);
647
776
  g_object_class_install_property (obj_class, PROP_PATH, pspec);
648
777
  
649
778
  pspec = g_param_spec_boolean ("active", "active", "active", FALSE, G_PARAM_READABLE);