Merge lp:~pitti/computer-janitor/pygi into lp:computer-janitor
- pygi
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Barry Warsaw |
Approved revision: | 257 |
Merged at revision: | 254 |
Proposed branch: | lp:~pitti/computer-janitor/pygi |
Merge into: | lp:computer-janitor |
Diff against target: |
365 lines (+74/-51) 7 files modified
computerjanitorapp/gtk/dialogs.py (+14/-14) computerjanitorapp/gtk/store.py (+5/-5) computerjanitorapp/gtk/ui.py (+31/-23) data/ComputerJanitor.ui (+0/-2) debian/changelog (+18/-0) debian/control (+6/-6) run_from_checkout.sh (+0/-1) |
To merge this branch: | bzr merge lp:~pitti/computer-janitor/pygi |
Related bugs: | |
Related blueprints: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Barry Warsaw | Approve | ||
Martin Pitt | Needs Resubmitting | ||
Review via email: mp+46779@code.launchpad.net |
Commit message
Description of the change
This branch ports from pygtk to pygi. With GTK3 it works perfectly, with GTK2 we have to disable the "select all/none" right-click popup menu, but I think we can live with that (see changelog and code comment for details).
Note that I had to fix some stuff in pygobject for this, so I bumped the dependency to a not-yet-released version. I'll upload a new git snapshot of pygobject to natty soon, but for now if you want to play with this, do
git clone git://git.
./autogen.sh && make
export PYTHONPATH=
and then run "./run_
I think it should work with the current gtk2 that we have in Natty (I tested it), but I also did a lot of fixes there recently for porting other software. So please let me know if you get crashes or malfunctions.
Martin Pitt (pitti) wrote : | # |
Barry Warsaw (barry) wrote : | # |
Thanks Martin! I'll give it another try tomorrow.
- 257. By Martin Pitt
-
merge with trunk
Martin Pitt (pitti) wrote : | # |
I merged my branch with trunk for yesterday's upload, and ported the new bits.
Barry Warsaw (barry) wrote : | # |
Thanks Martin, this looks really good. I'm going to go ahead and merge it, with a few minor changes (which I'll make after the merge):
* Bump version number to 2.1
* Update copyright years
* Tweak a few Python style things
* Use logging instead of stderr for the popup message
On the latter, what do you think about adding an Edit menu that has the following items:
Select all
Select all packages
Select all other
---
Unselect all
Unselect all packages
Unselect all other
That would at least provide the missing functionality elsewhere, and we could even keep that when using gtk3.
Martin Pitt (pitti) wrote : | # |
Thanks Barry! An Edit menu sounds fine to me, and it's also more obvious than the right click menu. But in the next Ubuntu release we'll have GTK 3, and thus can have the menu back.
Preview Diff
1 | === modified file 'computerjanitorapp/gtk/dialogs.py' | |||
2 | --- computerjanitorapp/gtk/dialogs.py 2011-02-15 22:24:27 +0000 | |||
3 | +++ computerjanitorapp/gtk/dialogs.py 2011-02-16 13:45:44 +0000 | |||
4 | @@ -23,7 +23,7 @@ | |||
5 | 23 | ] | 23 | ] |
6 | 24 | 24 | ||
7 | 25 | 25 | ||
9 | 26 | import gtk | 26 | from gi.repository import Gtk |
10 | 27 | 27 | ||
11 | 28 | from operator import mod as interpolate | 28 | from operator import mod as interpolate |
12 | 29 | 29 | ||
13 | @@ -71,15 +71,15 @@ | |||
14 | 71 | if ok_button is None: | 71 | if ok_button is None: |
15 | 72 | # The user de-selected all cruft from the ui, so there's actually | 72 | # The user de-selected all cruft from the ui, so there's actually |
16 | 73 | # nothing to clean up. | 73 | # nothing to clean up. |
18 | 74 | dialog = gtk.MessageDialog( | 74 | dialog = Gtk.MessageDialog( |
19 | 75 | parent=self._ui.widgets['window'], | 75 | parent=self._ui.widgets['window'], |
22 | 76 | type=gtk.MESSAGE_WARNING, | 76 | type=Gtk.MessageType.WARNING, |
23 | 77 | buttons=gtk.BUTTONS_NONE, | 77 | buttons=Gtk.ButtonsType.NONE, |
24 | 78 | message_format=_('There is nothing to clean up'), | 78 | message_format=_('There is nothing to clean up'), |
25 | 79 | ) | 79 | ) |
26 | 80 | dialog.set_title(_('Clean up')) | 80 | dialog.set_title(_('Clean up')) |
27 | 81 | dialog.format_secondary_markup(message) | 81 | dialog.format_secondary_markup(message) |
29 | 82 | dialog.add_button(_('Ok'), gtk.RESPONSE_YES) | 82 | dialog.add_button(_('Ok'), Gtk.ResponseType.YES) |
30 | 83 | dialog.show_all() | 83 | dialog.show_all() |
31 | 84 | dialog.run() | 84 | dialog.run() |
32 | 85 | dialog.hide() | 85 | dialog.hide() |
33 | @@ -88,20 +88,20 @@ | |||
34 | 88 | # but that would require a richer interface to the dbus service, | 88 | # but that would require a richer interface to the dbus service, |
35 | 89 | # and probably to the cruft plugin architecture underneath that. | 89 | # and probably to the cruft plugin architecture underneath that. |
36 | 90 | message = _('Are you sure you want to clean your system?') | 90 | message = _('Are you sure you want to clean your system?') |
38 | 91 | dialog = gtk.MessageDialog( | 91 | dialog = Gtk.MessageDialog( |
39 | 92 | parent=self._ui.widgets['window'], | 92 | parent=self._ui.widgets['window'], |
42 | 93 | type=gtk.MESSAGE_WARNING, | 93 | type=Gtk.MessageType.WARNING, |
43 | 94 | buttons=gtk.BUTTONS_NONE, | 94 | buttons=Gtk.ButtonsType.NONE, |
44 | 95 | message_format=message) | 95 | message_format=message) |
45 | 96 | dialog.set_title(_('Clean up')) | 96 | dialog.set_title(_('Clean up')) |
46 | 97 | dialog.format_secondary_markup(message) | 97 | dialog.format_secondary_markup(message) |
49 | 98 | dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CLOSE) | 98 | dialog.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CLOSE) |
50 | 99 | dialog.add_button(ok_button, gtk.RESPONSE_YES) | 99 | dialog.add_button(ok_button, Gtk.ResponseType.YES) |
51 | 100 | # Show the dialog and get the user's response. | 100 | # Show the dialog and get the user's response. |
52 | 101 | dialog.show_all() | 101 | dialog.show_all() |
53 | 102 | response = dialog.run() | 102 | response = dialog.run() |
54 | 103 | dialog.hide() | 103 | dialog.hide() |
56 | 104 | return response == gtk.RESPONSE_YES | 104 | return response == Gtk.ResponseType.YES |
57 | 105 | 105 | ||
58 | 106 | 106 | ||
59 | 107 | class CleanupProblem(DialogBase): | 107 | class CleanupProblem(DialogBase): |
60 | @@ -116,10 +116,10 @@ | |||
61 | 116 | message = _('System clean up could not complete. ' | 116 | message = _('System clean up could not complete. ' |
62 | 117 | 'Be sure no other package manager such as Synaptic or ' | 117 | 'Be sure no other package manager such as Synaptic or ' |
63 | 118 | 'Update Manager is running.') | 118 | 'Update Manager is running.') |
65 | 119 | dialog = gtk.MessageDialog( | 119 | dialog = Gtk.MessageDialog( |
66 | 120 | parent=self._ui.widgets['window'], | 120 | parent=self._ui.widgets['window'], |
69 | 121 | type=gtk.MESSAGE_ERROR, | 121 | type=Gtk.MessageType.ERROR, |
70 | 122 | buttons=gtk.BUTTONS_OK, | 122 | buttons=Gtk.ButtonsType.OK, |
71 | 123 | message_format=message) | 123 | message_format=message) |
72 | 124 | dialog.set_title(_('System clean up failure')) | 124 | dialog.set_title(_('System clean up failure')) |
73 | 125 | dialog.show_all() | 125 | dialog.show_all() |
74 | 126 | 126 | ||
75 | === modified file 'computerjanitorapp/gtk/store.py' | |||
76 | --- computerjanitorapp/gtk/store.py 2010-03-22 18:17:11 +0000 | |||
77 | +++ computerjanitorapp/gtk/store.py 2011-02-16 13:45:44 +0000 | |||
78 | @@ -24,7 +24,7 @@ | |||
79 | 24 | ] | 24 | ] |
80 | 25 | 25 | ||
81 | 26 | 26 | ||
83 | 27 | import gtk | 27 | from gi.repository import Gtk |
84 | 28 | import gobject | 28 | import gobject |
85 | 29 | 29 | ||
86 | 30 | 30 | ||
87 | @@ -49,7 +49,7 @@ | |||
88 | 49 | 49 | ||
89 | 50 | 50 | ||
90 | 51 | class Store: | 51 | class Store: |
92 | 52 | """The higher level wrapper around the gtk.ListStore.""" | 52 | """The higher level wrapper around the Gtk.ListStore.""" |
93 | 53 | 53 | ||
94 | 54 | def __init__(self, janitord): | 54 | def __init__(self, janitord): |
95 | 55 | """Create the Store. | 55 | """Create the Store. |
96 | @@ -63,7 +63,7 @@ | |||
97 | 63 | # of cruft. See ListStoreColumns for details. | 63 | # of cruft. See ListStoreColumns for details. |
98 | 64 | # | 64 | # |
99 | 65 | # XXX 2010-03-04 barry: pygtk does not like 'unicode'. | 65 | # XXX 2010-03-04 barry: pygtk does not like 'unicode'. |
101 | 66 | self.store = gtk.ListStore(str, str, str, bool, bool, bool, bool, bool) | 66 | self.store = Gtk.ListStore(str, str, str, bool, bool, bool, bool, bool) |
102 | 67 | 67 | ||
103 | 68 | def find_cruft(self): | 68 | def find_cruft(self): |
104 | 69 | """Find cruft and populate the backing store. | 69 | """Find cruft and populate the backing store. |
105 | @@ -139,7 +139,7 @@ | |||
106 | 139 | 139 | ||
107 | 140 | # Filter functions for use with TreeView column display. | 140 | # Filter functions for use with TreeView column display. |
108 | 141 | 141 | ||
110 | 142 | def unused(store, iter): | 142 | def unused(store, iter, data): |
111 | 143 | """True if the cruft is not being ignored and is package cruft. | 143 | """True if the cruft is not being ignored and is package cruft. |
112 | 144 | 144 | ||
113 | 145 | :param store: The ListStore instance. | 145 | :param store: The ListStore instance. |
114 | @@ -150,7 +150,7 @@ | |||
115 | 150 | return show and is_package_cruft | 150 | return show and is_package_cruft |
116 | 151 | 151 | ||
117 | 152 | 152 | ||
119 | 153 | def optimize(store, iter): | 153 | def optimize(store, iter, data): |
120 | 154 | """True if the cruft is not package cruft. | 154 | """True if the cruft is not package cruft. |
121 | 155 | 155 | ||
122 | 156 | :param store: The ListStore instance. | 156 | :param store: The ListStore instance. |
123 | 157 | 157 | ||
124 | === modified file 'computerjanitorapp/gtk/ui.py' | |||
125 | --- computerjanitorapp/gtk/ui.py 2010-08-23 13:56:29 +0000 | |||
126 | +++ computerjanitorapp/gtk/ui.py 2011-02-16 13:45:44 +0000 | |||
127 | @@ -23,11 +23,12 @@ | |||
128 | 23 | 23 | ||
129 | 24 | 24 | ||
130 | 25 | import os | 25 | import os |
132 | 26 | import gtk | 26 | from gi.repository import Gtk |
133 | 27 | Gtk.require_version('2.0') | ||
134 | 27 | import sys | 28 | import sys |
135 | 28 | import dbus | 29 | import dbus |
136 | 29 | import glib | 30 | import glib |
138 | 30 | import pango | 31 | from gi.repository import Pango |
139 | 31 | import gobject | 32 | import gobject |
140 | 32 | 33 | ||
141 | 33 | from operator import mod | 34 | from operator import mod |
142 | @@ -86,7 +87,7 @@ | |||
143 | 86 | 87 | ||
144 | 87 | def run(self): | 88 | def run(self): |
145 | 88 | """Set up the widgets and run the main loop.""" | 89 | """Set up the widgets and run the main loop.""" |
147 | 89 | builder = gtk.Builder() | 90 | builder = Gtk.Builder() |
148 | 90 | builder.set_translation_domain('computerjanitor') | 91 | builder.set_translation_domain('computerjanitor') |
149 | 91 | # Load the glade ui file, which can be overridden from the environment | 92 | # Load the glade ui file, which can be overridden from the environment |
150 | 92 | # for testing purposes. | 93 | # for testing purposes. |
151 | @@ -109,7 +110,7 @@ | |||
152 | 109 | root.set_default_size(ROOT_WIDTH, ROOT_HEIGHT) | 110 | root.set_default_size(ROOT_WIDTH, ROOT_HEIGHT) |
153 | 110 | # Map the root window and go! | 111 | # Map the root window and go! |
154 | 111 | root.show() | 112 | root.show() |
156 | 112 | gtk.main() | 113 | Gtk.main() |
157 | 113 | 114 | ||
158 | 114 | def find_and_bind_widgets(self, builder): | 115 | def find_and_bind_widgets(self, builder): |
159 | 115 | """Bind widgets and callbacks.""" | 116 | """Bind widgets and callbacks.""" |
160 | @@ -117,8 +118,8 @@ | |||
161 | 117 | # keeping track of them as mapped to their name. | 118 | # keeping track of them as mapped to their name. |
162 | 118 | self.widgets = {} | 119 | self.widgets = {} |
163 | 119 | for ui_object in builder.get_objects(): | 120 | for ui_object in builder.get_objects(): |
166 | 120 | if issubclass(type(ui_object), gtk.Buildable): | 121 | if issubclass(type(ui_object), Gtk.Buildable): |
167 | 121 | widget_name = gtk.Buildable.get_name(ui_object) | 122 | widget_name = Gtk.Buildable.get_name(ui_object) |
168 | 122 | self.widgets[widget_name] = ui_object | 123 | self.widgets[widget_name] = ui_object |
169 | 123 | # Search through the attributes of this instance looking for | 124 | # Search through the attributes of this instance looking for |
170 | 124 | # callbacks for this widget. We use the naming convention | 125 | # callbacks for this widget. We use the naming convention |
171 | @@ -143,29 +144,29 @@ | |||
172 | 143 | # Each TreeView contains two columns. The leftmost one is a toggle | 144 | # Each TreeView contains two columns. The leftmost one is a toggle |
173 | 144 | # that when select tells c-j to act on that cruft. Deselecting the | 145 | # that when select tells c-j to act on that cruft. Deselecting the |
174 | 145 | # toggle ignores the package for next time. | 146 | # toggle ignores the package for next time. |
176 | 146 | toggle_cr = gtk.CellRendererToggle() | 147 | toggle_cr = Gtk.CellRendererToggle() |
177 | 147 | toggle_cr.connect('toggled', self._toggled, treeview) | 148 | toggle_cr.connect('toggled', self._toggled, treeview) |
178 | 148 | toggle_cr.set_property('yalign', 0) | 149 | toggle_cr.set_property('yalign', 0) |
181 | 149 | toggle_col = gtk.TreeViewColumn() | 150 | toggle_col = Gtk.TreeViewColumn() |
182 | 150 | toggle_col.pack_start(toggle_cr) | 151 | toggle_col.pack_start(toggle_cr, True) |
183 | 151 | toggle_col.add_attribute(toggle_cr, 'active', ListStoreColumns.active) | 152 | toggle_col.add_attribute(toggle_cr, 'active', ListStoreColumns.active) |
184 | 152 | treeview.append_column(toggle_col) | 153 | treeview.append_column(toggle_col) |
185 | 153 | # The rightmost column contains the details of the cruft. It will | 154 | # The rightmost column contains the details of the cruft. It will |
186 | 154 | # always contain the cruft name and can be expanded to display cruft | 155 | # always contain the cruft name and can be expanded to display cruft |
187 | 155 | # details. Tell the column to get its toggle's active state from the | 156 | # details. Tell the column to get its toggle's active state from the |
188 | 156 | # model. | 157 | # model. |
190 | 157 | name_cr = gtk.CellRendererText() | 158 | name_cr = Gtk.CellRendererText() |
191 | 158 | name_cr.set_property('yalign', 0) | 159 | name_cr.set_property('yalign', 0) |
195 | 159 | name_cr.set_property('wrap-mode', pango.WRAP_WORD) | 160 | name_cr.set_property('wrap-mode', Pango.WrapMode.WORD) |
196 | 160 | name_col = gtk.TreeViewColumn() | 161 | name_col = Gtk.TreeViewColumn() |
197 | 161 | name_col.pack_start(name_cr) | 162 | name_col.pack_start(name_cr, True) |
198 | 162 | name_col.add_attribute(name_cr, 'markup', ListStoreColumns.text) | 163 | name_col.add_attribute(name_cr, 'markup', ListStoreColumns.text) |
199 | 163 | treeview.append_column(name_col) | 164 | treeview.append_column(name_col) |
200 | 164 | self.cruft_name_columns.add(name_col) | 165 | self.cruft_name_columns.add(name_col) |
201 | 165 | # The individual crufts may or may not be visible in this TreeView. | 166 | # The individual crufts may or may not be visible in this TreeView. |
202 | 166 | # It's the filter function that controls this, so set that now. | 167 | # It's the filter function that controls this, so set that now. |
205 | 167 | filter_store = self.store.filter_new() | 168 | filter_store = self.store.filter_new(None) |
206 | 168 | filter_store.set_visible_func(filter_func) | 169 | filter_store.set_visible_func(filter_func, None) |
207 | 169 | treeview.set_model(filter_store) | 170 | treeview.set_model(filter_store) |
208 | 170 | # Each TreeView has a popup menu for select or deselecting all visible | 171 | # Each TreeView has a popup menu for select or deselecting all visible |
209 | 171 | # cruft. | 172 | # cruft. |
210 | @@ -176,12 +177,12 @@ | |||
211 | 176 | 177 | ||
212 | 177 | :param treeview: The `TreeView` to attach the menu to. | 178 | :param treeview: The `TreeView` to attach the menu to. |
213 | 178 | """ | 179 | """ |
215 | 179 | select_all = gtk.MenuItem(label='Select all') | 180 | select_all = Gtk.MenuItem(label='Select all') |
216 | 180 | select_all.connect('activate', self.popup_menu_select_all, treeview) | 181 | select_all.connect('activate', self.popup_menu_select_all, treeview) |
218 | 181 | unselect_all = gtk.MenuItem(label='Unselect all') | 182 | unselect_all = Gtk.MenuItem(label='Unselect all') |
219 | 182 | unselect_all.connect('activate', | 183 | unselect_all.connect('activate', |
220 | 183 | self.popup_menu_unselect_all, treeview) | 184 | self.popup_menu_unselect_all, treeview) |
222 | 184 | menu = gtk.Menu() | 185 | menu = Gtk.Menu() |
223 | 185 | menu.append(select_all) | 186 | menu.append(select_all) |
224 | 186 | menu.append(unselect_all) | 187 | menu.append(unselect_all) |
225 | 187 | menu.show_all() | 188 | menu.show_all() |
226 | @@ -389,7 +390,7 @@ | |||
227 | 389 | # Don't quit while we're working. | 390 | # Don't quit while we're working. |
228 | 390 | if self.working: | 391 | if self.working: |
229 | 391 | return True | 392 | return True |
231 | 392 | gtk.main_quit() | 393 | Gtk.main_quit() |
232 | 393 | 394 | ||
233 | 394 | on_window_delete_event = on_quit_menuitem_activate | 395 | on_window_delete_event = on_quit_menuitem_activate |
234 | 395 | 396 | ||
235 | @@ -402,7 +403,7 @@ | |||
236 | 402 | """ | 403 | """ |
237 | 403 | # Original comment: This is slightly tricky and probably a source of | 404 | # Original comment: This is slightly tricky and probably a source of |
238 | 404 | # bugs. Oh well. | 405 | # bugs. Oh well. |
240 | 405 | if event.button == 1: | 406 | if event.button.button == 1: |
241 | 406 | # Left button event. Select the row being clicked on. If the | 407 | # Left button event. Select the row being clicked on. If the |
242 | 407 | # click is on the cruft name, show or hide its long description. | 408 | # click is on the cruft name, show or hide its long description. |
243 | 408 | # If the click the click is elsewhere do not handle it. This | 409 | # If the click the click is elsewhere do not handle it. This |
244 | @@ -423,7 +424,7 @@ | |||
245 | 423 | # We are not handling this event so that the toggle button | 424 | # We are not handling this event so that the toggle button |
246 | 424 | # handling can occur. | 425 | # handling can occur. |
247 | 425 | return False | 426 | return False |
249 | 426 | elif event.button == 3: | 427 | elif event.button.button == 3: |
250 | 427 | # Right button event. Pop up the select/deselect all menu. | 428 | # Right button event. Pop up the select/deselect all menu. |
251 | 428 | treeview.grab_focus() | 429 | treeview.grab_focus() |
252 | 429 | x = int(event.x) | 430 | x = int(event.x) |
253 | @@ -434,7 +435,14 @@ | |||
254 | 434 | path, column, cell_x, cell_y = pathinfo | 435 | path, column, cell_x, cell_y = pathinfo |
255 | 435 | treeview.set_cursor(path, column, False) | 436 | treeview.set_cursor(path, column, False) |
256 | 436 | menu = self.popup_menus[treeview] | 437 | menu = self.popup_menus[treeview] |
258 | 437 | menu.popup(None, None, None, event.button, time) | 438 | try: |
259 | 439 | menu.popup_for_device(None, None, None, None, None, | ||
260 | 440 | event.button.button, time) | ||
261 | 441 | except AttributeError: | ||
262 | 442 | # popup_for_device() is introspection safe, but only exists in | ||
263 | 443 | # GTK3. popup() isn't introspectable, so in GTK 2 we need to | ||
264 | 444 | # disable the popup menu functionality | ||
265 | 445 | print >> sys.stderr, 'popup menu not supported when using GTK2' | ||
266 | 438 | return True | 446 | return True |
267 | 439 | else: | 447 | else: |
268 | 440 | # No other events are handled by us. | 448 | # No other events are handled by us. |
269 | @@ -454,7 +462,7 @@ | |||
270 | 454 | # Get the rightmost of the two columns in the TreeView, i.e. the one | 462 | # Get the rightmost of the two columns in the TreeView, i.e. the one |
271 | 455 | # containing the text. | 463 | # containing the text. |
272 | 456 | column = treeview.get_column(1) | 464 | column = treeview.get_column(1) |
274 | 457 | name_cr = column.get_cell_renderers()[0] | 465 | name_cr = column.get_cells()[0] |
275 | 458 | # Wrap to the entire width of the column. | 466 | # Wrap to the entire width of the column. |
276 | 459 | width = column.get_width() | 467 | width = column.get_width() |
277 | 460 | name_cr.set_property('wrap-width', width) | 468 | name_cr.set_property('wrap-width', width) |
278 | 461 | 469 | ||
279 | === modified file 'data/ComputerJanitor.ui' | |||
280 | --- data/ComputerJanitor.ui 2010-09-20 12:31:47 +0000 | |||
281 | +++ data/ComputerJanitor.ui 2011-02-16 13:45:44 +0000 | |||
282 | @@ -266,7 +266,6 @@ | |||
283 | 266 | <property name="border_width">5</property> | 266 | <property name="border_width">5</property> |
284 | 267 | <property name="type_hint">normal</property> | 267 | <property name="type_hint">normal</property> |
285 | 268 | <property name="transient_for">window</property> | 268 | <property name="transient_for">window</property> |
286 | 269 | <property name="has_separator">False</property> | ||
287 | 270 | <property name="program_name">Computer Janitor</property> | 269 | <property name="program_name">Computer Janitor</property> |
288 | 271 | <property name="version">x.y</property> | 270 | <property name="version">x.y</property> |
289 | 272 | <property name="copyright" translatable="yes">Copyright 2008, 2009, 2010 Canonical Ltd. | 271 | <property name="copyright" translatable="yes">Copyright 2008, 2009, 2010 Canonical Ltd. |
290 | @@ -305,7 +304,6 @@ | |||
291 | 305 | <property name="destroy_with_parent">True</property> | 304 | <property name="destroy_with_parent">True</property> |
292 | 306 | <property name="type_hint">normal</property> | 305 | <property name="type_hint">normal</property> |
293 | 307 | <property name="transient_for">window</property> | 306 | <property name="transient_for">window</property> |
294 | 308 | <property name="has_separator">False</property> | ||
295 | 309 | <child internal-child="vbox"> | 307 | <child internal-child="vbox"> |
296 | 310 | <object class="GtkVBox" id="dialog-vbox2"> | 308 | <object class="GtkVBox" id="dialog-vbox2"> |
297 | 311 | <property name="visible">True</property> | 309 | <property name="visible">True</property> |
298 | 312 | 310 | ||
299 | === modified file 'debian/changelog' | |||
300 | --- debian/changelog 2011-02-15 23:20:27 +0000 | |||
301 | +++ debian/changelog 2011-02-16 13:45:44 +0000 | |||
302 | @@ -1,3 +1,21 @@ | |||
303 | 1 | computer-janitor (2.0.6-0ubuntu1) UNRELEASED; urgency=low | ||
304 | 2 | |||
305 | 3 | * data/ComputerJanitor.ui: Drop obsolete has_separator properties. | ||
306 | 4 | * run_from_checkout.sh: Drop setting of $PYTHONPATH. Current directory is | ||
307 | 5 | there by default anyway, and this breaks setting it from the environment. | ||
308 | 6 | * computerjanitorapp/gtk/*: Port from pygtk2 to pygi. Works fully with GTK3 | ||
309 | 7 | now, with GTK2 we need to disable the right-click popup menu | ||
310 | 8 | (popup_for_device() is introspection safe, but only exists in GTK3. | ||
311 | 9 | popup() isn't introspectable). | ||
312 | 10 | * computerjanitorapp/gtk/ui.py: Force GTK2 for now, as we do not yet have a | ||
313 | 11 | GTK3 theme in Natty, and don't carry the GTK3 stack in the default | ||
314 | 12 | install. | ||
315 | 13 | * debian/control: Update dependencies for the pygtk → pygi switch. | ||
316 | 14 | * debian/control: Drop obsolete system-cleaner conflicts and gksu | ||
317 | 15 | dependency. | ||
318 | 16 | |||
319 | 17 | -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 15 Jan 2011 11:31:02 -0600 | ||
320 | 18 | |||
321 | 1 | computer-janitor (2.0.5-0ubuntu1) natty; urgency=low | 19 | computer-janitor (2.0.5-0ubuntu1) natty; urgency=low |
322 | 2 | 20 | ||
323 | 3 | * python-dbus cannot type-convert a set, so use a tuple for the package | 21 | * python-dbus cannot type-convert a set, so use a tuple for the package |
324 | 4 | 22 | ||
325 | === modified file 'debian/control' | |||
326 | --- debian/control 2011-01-12 19:16:56 +0000 | |||
327 | +++ debian/control 2011-02-16 13:45:44 +0000 | |||
328 | @@ -18,8 +18,6 @@ | |||
329 | 18 | python-argparse (>= 1.1), | 18 | python-argparse (>= 1.1), |
330 | 19 | dbus, | 19 | dbus, |
331 | 20 | update-manager-core (>= 1:0.98.1) | 20 | update-manager-core (>= 1:0.98.1) |
332 | 21 | Conflicts: system-cleaner | ||
333 | 22 | Replaces: system-cleaner | ||
334 | 23 | XB-Python-Version: ${python:Versions} | 21 | XB-Python-Version: ${python:Versions} |
335 | 24 | Description: Clean up a system so it's more like a freshly installed one | 22 | Description: Clean up a system so it's more like a freshly installed one |
336 | 25 | Over time, a computer system tends to get cluttered. For example, | 23 | Over time, a computer system tends to get cluttered. For example, |
337 | @@ -35,10 +33,12 @@ | |||
338 | 35 | 33 | ||
339 | 36 | Package: computer-janitor-gtk | 34 | Package: computer-janitor-gtk |
340 | 37 | Architecture: all | 35 | Architecture: all |
345 | 38 | Depends: ${python:Depends}, computer-janitor (=${source:Version}), | 36 | Depends: ${python:Depends}, |
346 | 39 | python-gtk2 (>= 2.16), ${misc:Depends}, gksu | 37 | computer-janitor (=${source:Version}), |
347 | 40 | Conflicts: system-cleaner-gtk | 38 | python-gobject (>= 2.27.0+git20110116), |
348 | 41 | Replaces: system-cleaner-gtk | 39 | gir1.2-gtk-2.0 (>= 2.23.90-0ubuntu3), |
349 | 40 | gir1.2-pango-2.0, | ||
350 | 41 | ${misc:Depends} | ||
351 | 42 | XB-Python-Version: ${python:Versions} | 42 | XB-Python-Version: ${python:Versions} |
352 | 43 | Description: Clean up a system so it's more like a freshly installed one | 43 | Description: Clean up a system so it's more like a freshly installed one |
353 | 44 | Over time, a computer system tends to get cluttered. For example, | 44 | Over time, a computer system tends to get cluttered. For example, |
354 | 45 | 45 | ||
355 | === modified file 'run_from_checkout.sh' | |||
356 | --- run_from_checkout.sh 2009-11-10 20:09:40 +0000 | |||
357 | +++ run_from_checkout.sh 2011-02-16 13:45:44 +0000 | |||
358 | @@ -3,7 +3,6 @@ | |||
359 | 3 | # wrapper to make it easy to run c-j from a bzr checkout | 3 | # wrapper to make it easy to run c-j from a bzr checkout |
360 | 4 | # | 4 | # |
361 | 5 | 5 | ||
362 | 6 | export PYTHONPATH=. | ||
363 | 7 | export COMPUTER_JANITOR_PLUGINS=./plugins | 6 | export COMPUTER_JANITOR_PLUGINS=./plugins |
364 | 8 | export COMPUTER_JANITOR_GLADE=./data/ComputerJanitor.ui | 7 | export COMPUTER_JANITOR_GLADE=./data/ComputerJanitor.ui |
365 | 9 | export COMPUTER_JANITOR_DEBUG=yes | 8 | export COMPUTER_JANITOR_DEBUG=yes |
Note that I just uploaded a recent git snapshot of pygobject into natty, which now works with this branch. We also have the hot and fresh gtk 2.24.0 release with lots of annotation fixes, so this branch works fine on current natty now.