diff options
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | shell/view/clipboardmenu.py | 29 | ||||
-rw-r--r-- | sugar/graphics/palette.py | 50 |
3 files changed, 54 insertions, 26 deletions
@@ -1,3 +1,4 @@ +* #3081, #3497, #3485 Fix palette sizing and widget placement (benzea) * #2211 New XRestop interface style in Developer Console (edsiper) * #3649 Human readable file names on USB. (marco) diff --git a/shell/view/clipboardmenu.py b/shell/view/clipboardmenu.py index 35a3a48..5acd8cc 100644 --- a/shell/view/clipboardmenu.py +++ b/shell/view/clipboardmenu.py @@ -43,14 +43,8 @@ class ClipboardMenu(Palette): self.set_group_id('frame') - if percent < 100: - self._progress_bar = gtk.ProgressBar() - self._update_progress_bar() - - self.set_content(self._progress_bar) - self._progress_bar.show() - else: - self._progress_bar = None + self._progress_bar = None + self._update_progress_bar """ if preview: @@ -131,13 +125,19 @@ class ClipboardMenu(Palette): #self._stop_item.props.sensitive = True self._journal_item.props.sensitive = False - if self._percent == 100: - self._progress_bar.hide() - else: - self._progress_bar.show() + self._update_progress_bar() def _update_progress_bar(self): - if self._progress_bar: + if self._percent == 100.0: + if self._progress_bar: + self._progress_bar = None + self.set_content(None) + else: + if self._progress_bar is None: + self._progress_bar = gtk.ProgressBar() + self._progress_bar.show() + self.set_content(self._progress_bar) + self._progress_bar.props.fraction = self._percent / 100.0 self._progress_bar.props.text = '%.2f %%' % self._percent @@ -145,8 +145,7 @@ class ClipboardMenu(Palette): self.set_primary_text(name) self._percent = percent self._activities = activities - if self._progress_bar: - self._update_progress_bar() + self._update_progress_bar() self._update_items_visibility(installable) self._update_open_submenu() diff --git a/sugar/graphics/palette.py b/sugar/graphics/palette.py index 3873d38..b12d0a6 100644 --- a/sugar/graphics/palette.py +++ b/sugar/graphics/palette.py @@ -82,6 +82,8 @@ class Palette(gtk.Window): self.set_decorated(False) self.set_resizable(False) + # Just assume xthickness and ythickness are the same + self.set_border_width(self.style.xthickness) self.connect('realize', self._realize_cb) self.palette_state = self.PRIMARY @@ -106,9 +108,11 @@ class Palette(gtk.Window): self._popdown_anim.add(_PopdownAnimation(self)) vbox = gtk.VBox() - vbox.set_border_width(style.DEFAULT_PADDING) self._label = gtk.Label() + self._label.set_size_request(-1, style.zoom(style.GRID_CELL_SIZE)) + self._label.set_alignment(0, 0.5) + self._label.set_padding(style.zoom(15), 0) vbox.pack_start(self._label, False) self._secondary_box = gtk.VBox() @@ -117,11 +121,15 @@ class Palette(gtk.Window): self._separator = gtk.HSeparator() self._secondary_box.pack_start(self._separator) + self._menu_content_separator = gtk.HSeparator() + if menu_after_content: self._add_content() + self._secondary_box.pack_start(self._menu_content_separator) self._add_menu() else: self._add_menu() + self._secondary_box.pack_start(self._menu_content_separator) self._add_content() self.action_bar = PaletteActionBar() @@ -131,8 +139,8 @@ class Palette(gtk.Window): self.add(vbox) vbox.show() + # The menu is not shown here until an item is added self.menu = _Menu(self) - self.menu.show() self.connect('enter-notify-event', self._enter_notify_event_cb) @@ -148,9 +156,16 @@ class Palette(gtk.Window): self._menu_box.show() def _add_content(self): + # The content is not shown until a widget is added self._content = gtk.VBox() + self._content.set_border_width(style.zoom(15)) self._secondary_box.pack_start(self._content) - self._content.show() + + def do_style_set(self, previous_style): + # Prevent a warning from pygtk + if previous_style is not None: + gtk.Window.do_style_set(self, previous_style) + self.set_border_width(self.style.xthickness) def is_up(self): return self._up @@ -168,7 +183,7 @@ class Palette(gtk.Window): def set_primary_text(self, label, accel_path=None): if label is not None: - self._label.set_text(label) + self._label.set_markup("<b>"+label+"</b>") self._label.show() def set_content(self, widget): @@ -177,9 +192,12 @@ class Palette(gtk.Window): if widget is not None: self._content.add(widget) + self._content.show() + else: + self._content.hide() self._update_accept_focus() - self._update_separator() + self._update_separators() def set_group_id(self, group_id): if self._group_id: @@ -211,6 +229,15 @@ class Palette(gtk.Window): else: raise AssertionError + def do_size_request(self, requisition): + gtk.Window.do_size_request(self, requisition) + + requisition.width = max(requisition.width, self._full_request[0]) + + # Minimum width + requisition.width = max(requisition.width, + style.zoom(style.GRID_CELL_SIZE*2)) + def do_size_allocate(self, allocation): gtk.Window.do_size_allocate(self, allocation) @@ -256,11 +283,15 @@ class Palette(gtk.Window): # (Leaving out the window expose handler which redraws everything) gtk.Bin.do_expose_event(self, event) - def _update_separator(self): + def _update_separators(self): visible = len(self.menu.get_children()) > 0 or \ len(self._content.get_children()) > 0 self._separator.props.visible = visible + visible = len(self.menu.get_children()) > 0 and \ + len(self._content.get_children()) > 0 + self._menu_content_separator.props.visible = visible + def _update_accept_focus(self): accept_focus = len(self._content.get_children()) if self.window: @@ -273,13 +304,9 @@ class Palette(gtk.Window): def _update_full_request(self): state = self.palette_state - self.set_size_request(-1, -1) - self._set_state(self.SECONDARY) self._full_request = self.size_request() - self.set_size_request(self._full_request[0], -1) - self._set_state(state) def _update_position(self): @@ -417,7 +444,8 @@ class _Menu(_sugaruiext.Menu): def do_insert(self, item, position): _sugaruiext.Menu.do_insert(self, item, position) - self._palette._update_separator() + self._palette._update_separators() + self.show() def do_expose_event(self, event): # Ignore the Menu expose, just do the MenuShell expose to prevent any |