Difference between revisions of "Features/GTK3/Shell"

From Sugar Labs
< Features‎ | GTK3
Jump to navigation Jump to search
Line 154: Line 154:
 
but that is a private member. Then we need to look if we add a method to set the it,  
 
but that is a private member. Then we need to look if we add a method to set the it,  
 
or change the api to make the first container (where is the menu today) useful for other type of widgets.
 
or change the api to make the first container (where is the menu today) useful for other type of widgets.
 +
 +
=== Can't call gdk_window_set_user_data() ===
 +
 +
http://mail.gnome.org/archives/python-hackers-list/2011-September/msg00006.html
 +
 +
=== A handful of NMClient issues ===
 +
 +
See http://mail.gnome.org/archives/python-hackers-list/2011-August/msg00003.html and the other posts in the thread. Some problems resolved, some probably still pending.

Revision as of 09:33, 17 April 2012

Daniel Drake started an effort to port the shell to the GTK3 sugar-toolkit. These are the biggest issues identified so far:

Custom tree model for journal

Having trouble reimplementing this. See http://mail.gnome.org/archives/python-hackers-list/2011-December/msg00010.html

Custom Icon cell renderer

sugar3.graphics.icon.CellRendererIcon is based on pygtks GenericCellRenderer - needs to be ported

do_forall not working in pygobject

Needs:

cant call gdkwindow.raise()

raise is reserved word in Python. Workaround: getattr(win, 'raise')()

See http://mail.gnome.org/archives/python-hackers-list/2011-December/msg00011.html

xklavier

python-xklavier is based on pygtk codegen, we can probably just drop the link to pygtk, but failing that, we will need introspection bindings.

gdk_property_get

Not working:

def _property_get_trapped(window, prop, prop_type):
    Gdk.error_trap_push()

    prop_atom = Gdk.Atom.intern(prop, False)
    type_atom = Gdk.Atom.intern(prop_type, False)

    logging.warning("get prop %s %s %s", window, prop_atom, type_atom)
    prop_info = Gdk.property_get(window, prop_atom, type_atom, 0, 9999, False)
TypeError: Could not caller allocate argument 6 of callable property_get

ActivityIcon.do_draw never called

see http://mail.gnome.org/archives/python-hackers-list/2011-December/msg00013.html filed as https://bugzilla.gnome.org/show_bug.cgi?id=672864

Port hardcoded styles to the CSS stylesheet

For example in sugar/extensions/cpsection/network/view.py we have things like:

        label_server = gtk.Label(_('Server:'))
        label_server.set_alignment(1, 0.5)
        label_server.modify_fg(gtk.STATE_NORMAL,
                               style.COLOR_SELECTION_GREY.get_gdk_color())

Palettes can't include menu and widgets at the same time

We can use anything like this:


class SugarMenuItem(gtk.EventBox):

    __gsignals__ = {
        'clicked': (gobject.SIGNAL_RUN_FIRST, None, [])
    }

    def __init__(self, icon_name, label_text):
        gtk.EventBox.__init__(self)
        self._sensitive = True
        vbox = gtk.VBox()
        hbox = gtk.HBox()
        vbox.set_border_width(style.DEFAULT_PADDING)
        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 = '<span foreground="%s">' % style.COLOR_WHITE.get_html() + \
                    label_text + '</span>'
        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.STATE_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.STATE_NORMAL,
                style.COLOR_BUTTON_GREY.get_gdk_color())

    def __leave_notify_cb(self, widget, event):
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())

    def set_icon(self, icon_name):
        self.icon.props.icon_name = icon_name

    def set_label(self, label_text):
        text = '<span foreground="%s">' % style.COLOR_WHITE.get_html() + \
                    label_text + '</span>'
        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.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())

And add them to a vbox:


        # TODO: private!!!
        self._content.set_border_width(0)
 
        self._play_pause_button = SugarMenuItem('player_play',
                _('Say selected text'))
        self._play_pause_button.connect('clicked', self.__play_clicked_cb)
        vbox_menu.add(self._play_pause_button)

To do the SegurMenuItem take all the width in the palette, we need set the border_width in _content to zero, but that is a private member. Then we need to look if we add a method to set the it, or change the api to make the first container (where is the menu today) useful for other type of widgets.

Can't call gdk_window_set_user_data()

http://mail.gnome.org/archives/python-hackers-list/2011-September/msg00006.html

A handful of NMClient issues

See http://mail.gnome.org/archives/python-hackers-list/2011-August/msg00003.html and the other posts in the thread. Some problems resolved, some probably still pending.