~timo-jyrinki/bamf/ubuntu-0.2.124.1

« back to all changes in this revision

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

  • Committer: Timo Jyrinki
  • Date: 2012-11-14 07:15:04 UTC
  • mfrom: (235.1.49)
  • Revision ID: timo.jyrinki@canonical.com-20121114071504-s8umq349iaf7lwq6
* New upstream release.
  - Includes all previous cherry-picks
  - remerge libbamf, Makefile: don't export private symbols (factory 
    and matcher)
  - BamfMatcher: force a view as closed or not-closed on proper 
    signals. This avoids that a view that is opened is actually 
    marked as closed when really it's running. (LP: #925421)
  - Daemon, BamfApplication: Use the default icon if there is not 
    one defined in the desktop file. (LP: #886778)
  - BamfMatcher: don't reopen windows when iterating on view's 
    list, add tests.
  - Build fixes, including enabling introspection.
  - BamfMatcher: add support for libreoffice Base, and libreoffice 
    matching tests (LP: #1063862)

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 */
19
19
 
20
20
#include "bamf-legacy-screen.h"
21
 
#include "bamf-legacy-window-test.h"
 
21
#include "bamf-legacy-screen-private.h"
22
22
#include <gio/gio.h>
23
23
 
24
24
G_DEFINE_TYPE (BamfLegacyScreen, bamf_legacy_screen, G_TYPE_OBJECT);
25
25
#define BAMF_LEGACY_SCREEN_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE(obj, \
26
26
BAMF_TYPE_LEGACY_SCREEN, BamfLegacyScreenPrivate))
27
27
 
 
28
static BamfLegacyScreen *static_screen = NULL;
 
29
 
28
30
enum
29
31
{
30
32
  WINDOW_OPENED,
100
102
      class = parts[3];
101
103
      exec  = parts[4];
102
104
 
103
 
      window = BAMF_LEGACY_WINDOW (bamf_legacy_window_test_new (xid, name, class, exec));
104
 
      self->priv->windows = g_list_append (self->priv->windows, window);
105
 
      g_signal_emit (window, legacy_screen_signals[STACKING_CHANGED], 0);
106
 
 
107
 
      g_signal_connect (G_OBJECT (window), "closed",
108
 
                        (GCallback) handle_window_closed, self);
109
 
 
110
 
      g_signal_emit (self, legacy_screen_signals[WINDOW_OPENED], 0, window);
 
105
      BamfLegacyWindowTest *test_win = bamf_legacy_window_test_new (xid, name, class, exec);
 
106
      _bamf_legacy_screen_open_test_window (self, test_win);
111
107
    }
112
108
  else if (g_strcmp0 (parts[0], "close") == 0 && parts_size == 2)
113
109
    {
116
112
          window = l->data;
117
113
          if (bamf_legacy_window_get_xid (window) == xid)
118
114
            {
119
 
              bamf_legacy_window_test_close (BAMF_LEGACY_WINDOW_TEST (window));
 
115
              _bamf_legacy_screen_close_test_window (self, BAMF_LEGACY_WINDOW_TEST (window));
120
116
              break;
121
117
            }
122
118
        }
382
378
}
383
379
 
384
380
static void
385
 
bamf_legacy_screen_dispose (GObject *object)
 
381
bamf_legacy_screen_finalize (GObject *object)
386
382
{
387
 
  G_OBJECT_CLASS (bamf_legacy_screen_parent_class)->dispose (object);
 
383
  BamfLegacyScreen *self = BAMF_LEGACY_SCREEN (object);
 
384
 
 
385
  if (self->priv->windows)
 
386
    g_list_free_full (self->priv->windows, g_object_unref);
 
387
 
 
388
  if (self->priv->file)
 
389
    g_object_unref (self->priv->file);
 
390
 
 
391
  if (self->priv->stream)
 
392
    g_object_unref (self->priv->stream);
 
393
 
 
394
  static_screen = NULL;
 
395
 
 
396
  G_OBJECT_CLASS (bamf_legacy_screen_parent_class)->finalize (object);
388
397
}
389
398
 
390
399
static void
398
407
{
399
408
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
400
409
 
401
 
  object_class->dispose      = bamf_legacy_screen_dispose;
 
410
  object_class->finalize = bamf_legacy_screen_finalize;
402
411
 
403
412
  g_type_class_add_private (klass, sizeof (BamfLegacyScreenPrivate));
404
413
 
441
450
                  G_TYPE_NONE, 0);
442
451
}
443
452
 
444
 
static BamfLegacyScreen *self = NULL;
445
 
 
446
453
BamfLegacyScreen *
447
454
bamf_legacy_screen_get_default ()
448
455
{
449
 
  if (self)
450
 
    return self;
 
456
  BamfLegacyScreen *self;
 
457
 
 
458
  if (static_screen)
 
459
    return static_screen;
451
460
 
452
461
  self = (BamfLegacyScreen *) g_object_new (BAMF_TYPE_LEGACY_SCREEN, NULL);
 
462
  static_screen = self;
453
463
 
454
464
  self->priv->legacy_screen = wnck_screen_get_default ();
455
465
 
462
472
  g_signal_connect (G_OBJECT (self->priv->legacy_screen), "active-window-changed",
463
473
                    (GCallback) handle_active_window_changed, self);
464
474
 
465
 
  return self;
 
475
  return static_screen;
 
476
}
 
477
 
 
478
 
 
479
// Private functions for testing purposes
 
480
 
 
481
void _bamf_legacy_screen_open_test_window (BamfLegacyScreen *self, BamfLegacyWindowTest *test_window)
 
482
{
 
483
  GList *l;
 
484
  BamfLegacyWindow *window;
 
485
  guint xid;
 
486
 
 
487
  g_return_if_fail (BAMF_IS_LEGACY_SCREEN (self));
 
488
  g_return_if_fail (BAMF_IS_LEGACY_WINDOW_TEST (test_window));
 
489
 
 
490
  window = BAMF_LEGACY_WINDOW (test_window);
 
491
  xid = bamf_legacy_window_get_xid (window);
 
492
 
 
493
  for (l = self->priv->windows; l; l = l->next)
 
494
    {
 
495
      if (bamf_legacy_window_get_xid (BAMF_LEGACY_WINDOW (l->data)) == xid)
 
496
        {
 
497
          return;
 
498
        }
 
499
    }
 
500
 
 
501
  self->priv->windows = g_list_append (self->priv->windows, window);
 
502
  g_signal_emit (self, legacy_screen_signals[STACKING_CHANGED], 0);
 
503
 
 
504
  g_signal_connect (G_OBJECT (window), "closed",
 
505
                    (GCallback) handle_window_closed, self);
 
506
 
 
507
  g_signal_emit (self, legacy_screen_signals[WINDOW_OPENED], 0, window);
 
508
}
 
509
 
 
510
void _bamf_legacy_screen_close_test_window (BamfLegacyScreen *self, BamfLegacyWindowTest *test_window)
 
511
{
 
512
  g_return_if_fail (BAMF_IS_LEGACY_SCREEN (self));
 
513
  g_return_if_fail (BAMF_IS_LEGACY_WINDOW_TEST (test_window));
 
514
 
 
515
  // This will cause handle_window_closed to be called
 
516
  bamf_legacy_window_test_close (BAMF_LEGACY_WINDOW_TEST (test_window));
466
517
}