Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--shell/view/clipboardmenu.py29
-rw-r--r--sugar/graphics/palette.py50
3 files changed, 54 insertions, 26 deletions
diff --git a/NEWS b/NEWS
index 7bd313a..f8eea34 100644
--- a/NEWS
+++ b/NEWS
@@ -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