Merge lp:~saviq/unity-2d/reset-windowinfo-on-close into lp:unity-2d

Proposed by Michał Sawicz
Status: Merged
Approved by: Albert Astals Cid
Approved revision: 974
Merged at revision: 973
Proposed branch: lp:~saviq/unity-2d/reset-windowinfo-on-close
Merge into: lp:unity-2d
Diff against target: 120 lines (+47/-12)
2 files modified
libunity-2d-private/src/windowinfo.cpp (+44/-12)
libunity-2d-private/src/windowinfo.h (+3/-0)
To merge this branch: bzr merge lp:~saviq/unity-2d/reset-windowinfo-on-close
Reviewer Review Type Date Requested Status
Paweł Stołowski (community) Approve
Albert Astals Cid (community) Needs Fixing
Review via email: mp+96763@code.launchpad.net

Commit message

[lib] reset WindowInfo when the window in question closes

To post a comment you must log in.
Revision history for this message
Albert Astals Cid (aacid) wrote :

Double newline after WindowInfo::onWindowClosed(), one too many ;-)

review: Needs Fixing
Revision history for this message
Paweł Stołowski (stolowski) wrote :

WindowInfo::updateGeometry can be simplified: assign x = y = w = h = 0 in the if (m_wnckWindow == NULL) clause, and move m_position and m_size assignments outside of the if-else block (will remove duplicated m_size/m_position setting code).

Alternatively, move int x, y, w, h to the 'else' block, as it's not needed in m_wnckWindow == NULL block.

review: Needs Fixing
Revision history for this message
Michał Sawicz (saviq) wrote :

Both fixed.

Revision history for this message
Paweł Stołowski (stolowski) wrote :

Looks good!

review: Approve
Revision history for this message
Unity Merger (unity-merger) wrote :

The Jenkins job https://jenkins.qa.ubuntu.com/job/automerge-unity-2d/186/console reported an error when processing this lp:~saviq/unity-2d/reset-windowinfo-on-close branch.
Not merging it.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'libunity-2d-private/src/windowinfo.cpp'
2--- libunity-2d-private/src/windowinfo.cpp 2012-01-03 10:44:11 +0000
3+++ libunity-2d-private/src/windowinfo.cpp 2012-03-09 14:12:19 +0000
4@@ -104,6 +104,22 @@
5 return;
6 }
7
8+ if (contentXid == 0) {
9+ m_contentXid = 0;
10+ m_decoratedXid = 0;
11+ m_bamfApplication = NULL;
12+ m_bamfWindow = NULL;
13+ m_wnckWindow = NULL;
14+ Q_EMIT contentXidChanged(m_contentXid);
15+ Q_EMIT decoratedXidChanged(m_decoratedXid);
16+ Q_EMIT zChanged(z());
17+ Q_EMIT titleChanged(title());
18+ Q_EMIT iconChanged(icon());
19+ Q_EMIT desktopFileChanged(desktopFile());
20+ Q_EMIT workspaceChanged(workspace());
21+ return;
22+ }
23+
24 /* First figure out what's the BamfApplication to which the content Xid
25 belongs. However what we need is the actual BamfWindow, so we search
26 for it among all the BamfWindows for that app. */
27@@ -144,6 +160,7 @@
28
29 g_signal_connect(G_OBJECT(m_wnckWindow), "workspace-changed",
30 G_CALLBACK(WindowInfo::onWorkspaceChanged), this);
31+ connect(m_bamfWindow, SIGNAL(Closed()), this, SLOT(onWindowClosed()));
32
33 Q_EMIT contentXidChanged(m_contentXid);
34 Q_EMIT decoratedXidChanged(m_decoratedXid);
35@@ -159,8 +176,10 @@
36
37 void WindowInfo::setWorkspace(int workspaceNumber)
38 {
39- WnckWorkspace* workspace = wnck_screen_get_workspace(wnck_screen_get_default(), workspaceNumber);
40- wnck_window_move_to_workspace(m_wnckWindow, workspace);
41+ if (m_wnckWindow != NULL) {
42+ WnckWorkspace* workspace = wnck_screen_get_workspace(wnck_screen_get_default(), workspaceNumber);
43+ wnck_window_move_to_workspace(m_wnckWindow, workspace);
44+ }
45 }
46
47 unsigned int WindowInfo::decoratedXid() const
48@@ -181,15 +200,17 @@
49 unsigned int WindowInfo::z() const
50 {
51 int z = 0;
52- GList *stack = wnck_screen_get_windows_stacked(wnck_screen_get_default());
53- GList *cur = stack;
54- while (cur) {
55- z++;
56- WnckWindow *window = (WnckWindow*) cur->data;
57- if (wnck_window_get_xid(window) == m_contentXid) {
58- break;
59+ if (contentXid() != 0) {
60+ GList *stack = wnck_screen_get_windows_stacked(wnck_screen_get_default());
61+ GList *cur = stack;
62+ while (cur) {
63+ z++;
64+ WnckWindow *window = (WnckWindow*) cur->data;
65+ if (wnck_window_get_xid(window) == m_contentXid) {
66+ break;
67+ }
68+ cur = g_list_next(cur);
69 }
70- cur = g_list_next(cur);
71 }
72 return z;
73 }
74@@ -246,11 +267,20 @@
75 showWindow(m_wnckWindow);
76 }
77
78+void WindowInfo::onWindowClosed()
79+{
80+ setContentXid(0);
81+}
82+
83 void WindowInfo::updateGeometry()
84 {
85 int x, y, w, h;
86
87- wnck_window_get_geometry(m_wnckWindow, &x, &y, &w, &h);
88+ if (m_wnckWindow == NULL) {
89+ x = y = w = h = 0;
90+ } else {
91+ wnck_window_get_geometry(m_wnckWindow, &x, &y, &w, &h);
92+ }
93
94 m_position.setX(x);
95 m_position.setY(y);
96@@ -263,7 +293,9 @@
97
98 void WindowInfo::showWindow(WnckWindow* window)
99 {
100- wnck_window_activate(window, CurrentTime);
101+ if (window != NULL) {
102+ wnck_window_activate(window, CurrentTime);
103+ }
104 }
105
106 bool WindowInfo::isSameBamfWindow(BamfWindow *other)
107
108=== modified file 'libunity-2d-private/src/windowinfo.h'
109--- libunity-2d-private/src/windowinfo.h 2011-07-29 13:49:34 +0000
110+++ libunity-2d-private/src/windowinfo.h 2012-03-09 14:12:19 +0000
111@@ -103,6 +103,9 @@
112 void desktopFileChanged(QString desktopFile);
113 void workspaceChanged(int workspace);
114
115+private Q_SLOTS:
116+ void onWindowClosed();
117+
118 private:
119 void updateGeometry();
120 void updateWorkspace();

Subscribers

People subscribed via source and target branches