[Sugar-devel] How to make a GTK3 EventBox accept the focus?

Daniel Narvaez dwnarvaez at gmail.com
Thu Feb 28 11:20:07 EST 2013


GtkImage only works for me:

from gi.repository import Gtk

def image1_focus_in_cb(a, b):
    print("focus in 1")

def image1_focus_out_cb(a, b):
    print("focus out 1")

def image2_focus_in_cb(a, b):
    print("focus in 2")

def image2_focus_out_cb(a, b):
    print("focus out 2")


window = Gtk.Window()
box = Gtk.HBox()

image1 = Gtk.Image.new_from_file("")
image1.set_can_focus(True)

image1.connect("focus-in-event", image1_focus_in_cb)
image1.connect("focus-out-event", image1_focus_out_cb)

image2 = Gtk.Image.new_from_file("")
image2.set_can_focus(True)

image2.connect("focus-in-event", image2_focus_in_cb)
image2.connect("focus-out-event", image2_focus_out_cb)

box.pack_start(image1, False, False, 0)
box.pack_start(image2, False, False, 0)

window.add(box)
window.show_all()

Gtk.main()


On 28 February 2013 17:06, Daniel Narvaez <dwnarvaez at gmail.com> wrote:
> Two things you could try:
>
> - set_visible_window(True) the event box and also set_can_focus
>
> - Remove the box and set_can_focus the image.
>
>
> On Thursday, 28 February 2013, James Simmons wrote:
>>
>> Gonzalo,
>>
>> The problem with that it I want the arrow keys to page through the images
>> only when the image has the focus.  There are other places in the Activity
>> where I don't want to interfere with the arrow keys.  For instance, you can
>> make annotations for a specific image.
>>
>> I notice that GtkImage is a subclass of GtkWidget, so maybe that means
>> that I don't need the event box anymore.  Maybe the image itself can accept
>> the focus and receive the events.  The problem I have with that is that the
>> old GTK made Image extend Widget also, and as I remember it you couldn't get
>> events from an Image.  It was years ago.  Maybe I've been doing it wrong the
>> whole time.
>>
>> James Simmons
>>
>>
>> On Wed, Feb 27, 2013 at 6:24 PM, Gonzalo Odiard <gonzalo at laptop.org>
>> wrote:
>>>
>>> Can you catch the key-press-event in the activity class?
>>> I think other activities like Read or Terminal do this.
>>>
>>> Gonzalo
>>>
>>> On Wed, Feb 27, 2013 at 1:53 PM, James Simmons <nicestep at gmail.com>
>>> wrote:
>>>>
>>>> Aneesh,
>>>>
>>>> I'm trying to incorporate your GTK3 update to View Slides and release
>>>> the result on ASLO.  The problem I'm still having is that I cannot page
>>>> through the images using the keyboard as I used to.  What I did in the past
>>>> was to nest the image control in an event box and make the event box able to
>>>> accept the focus.  Then the user clicks on the image with the mouse to set
>>>> the focus and at that point the event box receives key press events.
>>>>
>>>> When you upgraded View Slides to use GTK3 you removed the code to make
>>>> the event box focusable.  I have tried to replace the missing line of code
>>>> with what seems to be the GTK3 equivalent but it isn't working.  I've done a
>>>> lot of google searches trying to figure out the problem and I'm not getting
>>>> anywhere.  I cannot release View Slides as it is.  It really needs to be
>>>> able to navigate through the images with the keyboard to be usable.
>>>>
>>>> I'm hoping you might have some thoughts or maybe an idea of how to do
>>>> the keyboard paging a different way.
>>>>
>>>> James Simmons
>>>>
>>>>
>>>> On Mon, Feb 25, 2013 at 6:20 AM, Manuel Quiñones <manuq at laptop.org>
>>>> wrote:
>>>>>
>>>>> Hi James,
>>>>>
>>>>> 2013/2/24 James Simmons <nicestep at gmail.com>:
>>>>> > I was looking at the upgrade to GTK3 done for View Slides and it
>>>>> > seems that
>>>>> > it no longer responds to the keyboard.  What I had done previously to
>>>>> > get it
>>>>> > to do that was to put the image I was displaying in an event box.  I
>>>>> > then
>>>>> > made the event box accept the focus like this:
>>>>> >
>>>>> > self.eventbox.set_events(gtk.gdk.KEY_PRESS_MASK |
>>>>> > gtk.gdk.BUTTON_PRESS_MASK)
>>>>> > self.eventbox.set_flags(gtk.CAN_FOCUS)
>>>>> >
>>>>> > The Gtk3 port changed the code to this:
>>>>> >
>>>>> > self.eventbox.set_events(Gdk.EventMask.KEY_PRESS_MASK |
>>>>> > Gdk.EventMask.BUTTON_PRESS_MASK)
>>>>> >
>>>>> > There was no code to make it accept the focus.  I tried adding this:
>>>>> >
>>>>> > self.eventbox.set_can_focus(True)
>>>>> >
>>>>> > This does not prevent the Activity from running, but it doesn't make
>>>>> > the
>>>>> > Event Box focusable either.
>>>>>
>>>>> Have you tried self.eventbox.grab_focus() ?
>>>>>
>>>>>
>>>>> http://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-grab-focus
>>>>>
>>>>> --
>>>>> .. manuq ..
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Sugar-devel mailing list
>>>> Sugar-devel at lists.sugarlabs.org
>>>> http://lists.sugarlabs.org/listinfo/sugar-devel
>>>>
>>>
>>
>
>
> --
> Daniel Narvaez
>



-- 
Daniel Narvaez


More information about the Sugar-devel mailing list