From 1a679ac11ce1acff1dd97234b8b2910a2ec55ce8 Mon Sep 17 00:00:00 2001 From: Manuel QuiƱones Date: Fri, 02 Mar 2012 19:01:34 +0000 Subject: Use SugarMenuItem in the back/forward palettes This is a fix for the GTK+3 menu palettes, and should be reverted when the palettes are fixed. Is the same hack as current Read activity. Signed-off-by: Manuel QuiƱones --- (limited to 'sugarmenuitem.py') diff --git a/sugarmenuitem.py b/sugarmenuitem.py new file mode 100644 index 0000000..5071406 --- /dev/null +++ b/sugarmenuitem.py @@ -0,0 +1,95 @@ +# Copyright 2012 One Laptop Per Child +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gi.repository import GObject +from gi.repository import Gtk + +from sugar3.graphics.icon import Icon +from sugar3.graphics import style + + +class SugarMenuItem(Gtk.EventBox): + + __gsignals__ = { + 'clicked': (GObject.SignalFlags.RUN_FIRST, None, []) + } + + def __init__(self, text_label='', icon_name=None): + Gtk.EventBox.__init__(self) + self._sensitive = True + vbox = Gtk.VBox() + hbox = Gtk.HBox() + vbox.set_border_width(style.DEFAULT_PADDING) + if icon_name is not None: + self.icon = Icon() + self.icon.props.icon_name = icon_name + hbox.pack_start(self.icon, expand=False, fill=False, + padding=style.DEFAULT_PADDING) + align = Gtk.Alignment(xalign=0.0, yalign=0.5, xscale=0.0, yscale=0.0) + text = '' % style.COLOR_WHITE.get_html() + \ + text_label + '' + self.label = Gtk.Label() + self.label.set_use_markup(True) + self.label.set_markup(text) + align.add(self.label) + hbox.pack_start(align, expand=True, fill=True, + padding=style.DEFAULT_PADDING) + vbox.pack_start(hbox, expand=False, fill=False, + padding=style.DEFAULT_PADDING) + self.add(vbox) + self.id_bt_release_cb = self.connect('button-release-event', + self.__button_release_cb) + self.id_enter_notify_cb = self.connect('enter-notify-event', + self.__enter_notify_cb) + self.id_leave_notify_cb = self.connect('leave-notify-event', + self.__leave_notify_cb) + self.modify_bg(Gtk.StateType.NORMAL, style.COLOR_BLACK.get_gdk_color()) + self.show_all() + self.set_above_child(True) + + def __button_release_cb(self, widget, event): + self.emit('clicked') + + def __enter_notify_cb(self, widget, event): + self.modify_bg(Gtk.StateType.NORMAL, + style.COLOR_BUTTON_GREY.get_gdk_color()) + + def __leave_notify_cb(self, widget, event): + self.modify_bg(Gtk.StateType.NORMAL, style.COLOR_BLACK.get_gdk_color()) + + def set_icon(self, icon_name): + self.icon.props.icon_name = icon_name + + def set_label(self, text_label): + text = '' % style.COLOR_WHITE.get_html() + \ + text_label + '' + self.label.set_markup(text) + + def set_sensitive(self, sensitive): + if self._sensitive == sensitive: + return + + self._sensitive = sensitive + if sensitive: + self.handler_unblock(self.id_bt_release_cb) + self.handler_unblock(self.id_enter_notify_cb) + self.handler_unblock(self.id_leave_notify_cb) + else: + self.handler_block(self.id_bt_release_cb) + self.handler_block(self.id_enter_notify_cb) + self.handler_block(self.id_leave_notify_cb) + self.modify_bg(Gtk.StateType.NORMAL, + style.COLOR_BLACK.get_gdk_color()) -- cgit v0.9.1