~ps-jenkins/bamf/latestsnapshot-0.4.0daily13.06.1913.04-0ubuntu1

« back to all changes in this revision

Viewing changes to src/bamf-legacy-window.c

BamfMatcher: use role and class changes signal to match LibreOffice and g-c-c. Fixes: https://bugs.launchpad.net/bugs/1100554.

Approved by Andrea Azzarone, PS Jenkins bot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
#define BAMF_LEGACY_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE(obj, \
33
33
BAMF_TYPE_LEGACY_WINDOW, BamfLegacyWindowPrivate))
34
34
 
 
35
#define WNCK_WINDOW_BAMF_DATA "bamf-legacy-window"
 
36
 
35
37
enum
36
38
{
37
39
  NAME_CHANGED,
 
40
  ROLE_CHANGED,
 
41
  CLASS_CHANGED,
38
42
  STATE_CHANGED,
39
43
  GEOMETRY_CHANGED,
40
44
  CLOSED,
146
150
{
147
151
  g_return_val_if_fail (BAMF_IS_LEGACY_WINDOW (self), NULL);
148
152
 
149
 
 
150
153
  if (BAMF_LEGACY_WINDOW_GET_CLASS (self)->get_name)
151
154
    return BAMF_LEGACY_WINDOW_GET_CLASS (self)->get_name (self);
152
155
 
153
156
  if (!self->priv->legacy_window)
154
157
    return NULL;
 
158
 
155
159
  return wnck_window_get_name (self->priv->legacy_window);
156
160
}
157
161
 
 
162
const char *
 
163
bamf_legacy_window_get_role (BamfLegacyWindow *self)
 
164
{
 
165
  g_return_val_if_fail (BAMF_IS_LEGACY_WINDOW (self), NULL);
 
166
 
 
167
  if (BAMF_LEGACY_WINDOW_GET_CLASS (self)->get_role)
 
168
    return BAMF_LEGACY_WINDOW_GET_CLASS (self)->get_role (self);
 
169
 
 
170
  if (!self->priv->legacy_window)
 
171
    return NULL;
 
172
 
 
173
  return wnck_window_get_role (self->priv->legacy_window);
 
174
}
 
175
 
158
176
char *
159
177
bamf_legacy_window_get_process_name (BamfLegacyWindow *self)
160
178
{
366
384
}
367
385
 
368
386
static void
369
 
handle_name_changed (WnckWindow *window, BamfLegacyWindow *self)
 
387
handle_window_signal (WnckWindow *window, gpointer data)
370
388
{
 
389
  BamfLegacyWindow *self = g_object_get_data (G_OBJECT (window), WNCK_WINDOW_BAMF_DATA);
371
390
  g_return_if_fail (BAMF_IS_LEGACY_WINDOW (self));
372
391
 
373
 
  g_signal_emit (self, legacy_window_signals[NAME_CHANGED], 0);
 
392
  g_signal_emit (self, legacy_window_signals[GPOINTER_TO_UINT (data)], 0);
374
393
}
375
394
 
376
395
static void
384
403
  g_signal_emit (self, legacy_window_signals[STATE_CHANGED], 0);
385
404
}
386
405
 
387
 
static void
388
 
handle_geometry_changed (WnckWindow *window, BamfLegacyWindow *self)
389
 
{
390
 
  g_return_if_fail (BAMF_IS_LEGACY_WINDOW (self));
391
 
 
392
 
  g_signal_emit (self, legacy_window_signals[GEOMETRY_CHANGED], 0);
393
 
}
394
 
 
395
406
gboolean
396
407
bamf_legacy_window_is_closed (BamfLegacyWindow *self)
397
408
{
546
557
{
547
558
  BamfLegacyWindow *self;
548
559
  GFile *file;
 
560
  guint i;
549
561
 
550
562
  self = BAMF_LEGACY_WINDOW (object);
551
563
 
564
576
 
565
577
  if (self->priv->legacy_window)
566
578
    {
 
579
      g_object_set_data (G_OBJECT (self->priv->legacy_window), WNCK_WINDOW_BAMF_DATA, NULL);
567
580
      g_signal_handlers_disconnect_by_data (self->priv->legacy_window, self);
 
581
 
 
582
      for (i = 0; i < LAST_SIGNAL; ++i)
 
583
        {
 
584
          g_signal_handlers_disconnect_by_func (self->priv->legacy_window,
 
585
                                                handle_window_signal,
 
586
                                                GUINT_TO_POINTER (NAME_CHANGED));
 
587
        }
568
588
    }
569
589
 
570
590
  G_OBJECT_CLASS (bamf_legacy_window_parent_class)->dispose (object);
593
613
                  G_OBJECT_CLASS_TYPE (klass),
594
614
                  G_SIGNAL_RUN_FIRST,
595
615
                  G_STRUCT_OFFSET (BamfLegacyWindowClass, name_changed),
596
 
                  NULL, NULL,
597
 
                  g_cclosure_marshal_VOID__VOID,
598
 
                  G_TYPE_NONE, 0);
 
616
                  NULL, NULL, NULL, G_TYPE_NONE, 0);
 
617
 
 
618
  legacy_window_signals [ROLE_CHANGED] =
 
619
    g_signal_new (BAMF_LEGACY_WINDOW_SIGNAL_ROLE_CHANGED,
 
620
                  G_OBJECT_CLASS_TYPE (klass),
 
621
                  G_SIGNAL_RUN_FIRST,
 
622
                  G_STRUCT_OFFSET (BamfLegacyWindowClass, role_changed),
 
623
                  NULL, NULL, NULL, G_TYPE_NONE, 0);
 
624
 
 
625
  legacy_window_signals [CLASS_CHANGED] =
 
626
    g_signal_new (BAMF_LEGACY_WINDOW_SIGNAL_CLASS_CHANGED,
 
627
                  G_OBJECT_CLASS_TYPE (klass),
 
628
                  G_SIGNAL_RUN_FIRST,
 
629
                  G_STRUCT_OFFSET (BamfLegacyWindowClass, class_changed),
 
630
                  NULL, NULL, NULL, G_TYPE_NONE, 0);
599
631
 
600
632
  legacy_window_signals [STATE_CHANGED] =
601
633
    g_signal_new (BAMF_LEGACY_WINDOW_SIGNAL_STATE_CHANGED,
602
634
                  G_OBJECT_CLASS_TYPE (klass),
603
635
                  G_SIGNAL_RUN_FIRST,
604
636
                  G_STRUCT_OFFSET (BamfLegacyWindowClass, state_changed),
605
 
                  NULL, NULL,
606
 
                  g_cclosure_marshal_VOID__VOID,
607
 
                  G_TYPE_NONE, 0);
 
637
                  NULL, NULL, NULL, G_TYPE_NONE, 0);
608
638
 
609
639
  legacy_window_signals [GEOMETRY_CHANGED] =
610
640
    g_signal_new (BAMF_LEGACY_WINDOW_SIGNAL_GEOMETRY_CHANGED,
611
641
                  G_OBJECT_CLASS_TYPE (klass),
612
642
                  G_SIGNAL_RUN_FIRST,
613
643
                  G_STRUCT_OFFSET (BamfLegacyWindowClass, geometry_changed),
614
 
                  NULL, NULL,
615
 
                  g_cclosure_marshal_VOID__VOID,
616
 
                  G_TYPE_NONE, 0);
 
644
                  NULL, NULL, NULL, G_TYPE_NONE, 0);
617
645
 
618
646
  legacy_window_signals [CLOSED] =
619
647
    g_signal_new (BAMF_LEGACY_WINDOW_SIGNAL_CLOSED,
620
648
                  G_OBJECT_CLASS_TYPE (klass),
621
649
                  G_SIGNAL_RUN_FIRST,
622
650
                  G_STRUCT_OFFSET (BamfLegacyWindowClass, closed),
623
 
                  NULL, NULL,
624
 
                  g_cclosure_marshal_VOID__VOID,
625
 
                  G_TYPE_NONE, 0);
 
651
                  NULL, NULL, NULL, G_TYPE_NONE, 0);
626
652
}
627
653
 
628
654
BamfLegacyWindow *
633
659
 
634
660
  self->priv->legacy_window = legacy_window;
635
661
 
 
662
  g_return_val_if_fail (WNCK_IS_WINDOW (self->priv->legacy_window), self);
 
663
  g_warn_if_fail (!g_object_get_data (G_OBJECT (legacy_window), WNCK_WINDOW_BAMF_DATA));
 
664
 
 
665
  g_object_set_data (G_OBJECT (legacy_window), WNCK_WINDOW_BAMF_DATA, self);
 
666
 
636
667
  g_signal_connect (G_OBJECT (legacy_window), "name-changed",
637
 
                    (GCallback) handle_name_changed, self);
 
668
                    G_CALLBACK (handle_window_signal),
 
669
                    GUINT_TO_POINTER (NAME_CHANGED));
 
670
 
 
671
  g_signal_connect (G_OBJECT (legacy_window), "role-changed",
 
672
                    G_CALLBACK (handle_window_signal),
 
673
                    GUINT_TO_POINTER (ROLE_CHANGED));
 
674
 
 
675
  g_signal_connect (G_OBJECT (legacy_window), "class-changed",
 
676
                    G_CALLBACK (handle_window_signal),
 
677
                    GUINT_TO_POINTER (CLASS_CHANGED));
 
678
 
 
679
  g_signal_connect (G_OBJECT (legacy_window), "geometry-changed",
 
680
                    G_CALLBACK (handle_window_signal),
 
681
                    GUINT_TO_POINTER (GEOMETRY_CHANGED));
638
682
 
639
683
  g_signal_connect (G_OBJECT (legacy_window), "state-changed",
640
 
                    (GCallback) handle_state_changed, self);
641
 
 
642
 
  g_signal_connect (G_OBJECT (legacy_window), "geometry-changed",
643
 
                    (GCallback) handle_geometry_changed, self);
 
684
                    G_CALLBACK (handle_state_changed), self);
644
685
 
645
686
  return self;
646
687
}