~vanvugt/unity/fix-865006

« back to all changes in this revision

Viewing changes to unity-shared/UScreen.cpp

  • Committer: Andrea Azzarone
  • Date: 2012-06-12 08:23:23 UTC
  • mfrom: (2400 unity)
  • mto: This revision was merged to the branch mainline in revision 2404.
  • Revision ID: azzaronea@gmail.com-20120612082323-zdw8jxwjcia8vi71
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
{
27
27
static UScreen* default_screen_ = nullptr;
28
28
nux::logging::Logger logger("unity.screen");
29
 
 
29
}
30
30
 
31
31
UScreen::UScreen()
32
32
  : screen_(gdk_screen_get_default(), glib::AddRef())
34
34
           "/org/freedesktop/UPower",
35
35
           "org.freedesktop.UPower",
36
36
           G_BUS_TYPE_SYSTEM)
37
 
  , refresh_id_(0)
38
37
  , primary_(0)
39
38
{
40
39
  size_changed_signal_.Connect(screen_, "size-changed", sigc::mem_fun(this, &UScreen::Changed));
48
47
{
49
48
  if (default_screen_ == this)
50
49
    default_screen_ = nullptr;
51
 
 
52
 
  if (refresh_id_ != 0)
53
 
    g_source_remove(refresh_id_);
54
50
}
55
51
 
56
52
UScreen* UScreen::GetDefault()
98
94
 
99
95
void UScreen::Changed(GdkScreen* screen)
100
96
{
101
 
  if (refresh_id_)
 
97
  if (refresh_idle_)
102
98
    return;
103
99
 
104
 
  refresh_id_ = g_idle_add([] (gpointer data) -> gboolean {
105
 
    auto self = static_cast<UScreen*>(data);
106
 
    self->refresh_id_ = 0;
107
 
    self->Refresh();
 
100
  refresh_idle_.reset(new glib::Idle([&] () {
 
101
    Refresh();
 
102
    refresh_idle_.reset();
108
103
 
109
 
    return FALSE;
110
 
  }, this);
 
104
    return false;
 
105
  }));
111
106
}
112
107
 
113
108
void UScreen::Refresh()
117
112
  nux::Geometry last_geo;
118
113
  monitors_.clear();
119
114
  primary_ = gdk_screen_get_primary_monitor(screen_);
 
115
  int monitors = gdk_screen_get_n_monitors(screen_);
120
116
 
121
 
  for (int i = 0; i < gdk_screen_get_n_monitors(screen_); i++)
 
117
  for (int i = 0; i < monitors; ++i)
122
118
  {
123
119
    GdkRectangle rect = { 0 };
124
120
    gdk_screen_get_monitor_geometry(screen_, i, &rect);