diff options
-rw-r--r-- | bitbake/lib/bb/ui/crumbs/persistenttooltip.py | 264 |
1 files changed, 132 insertions, 132 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/persistenttooltip.py b/bitbake/lib/bb/ui/crumbs/persistenttooltip.py index d065ab2c07..8ba0043381 100644 --- a/bitbake/lib/bb/ui/crumbs/persistenttooltip.py +++ b/bitbake/lib/bb/ui/crumbs/persistenttooltip.py | |||
@@ -26,135 +26,135 @@ except: | |||
26 | pass | 26 | pass |
27 | 27 | ||
28 | class PersistentTooltip(gtk.Window): | 28 | class PersistentTooltip(gtk.Window): |
29 | """ | 29 | """ |
30 | A tooltip which persists once shown until the user dismisses it with the Esc | 30 | A tooltip which persists once shown until the user dismisses it with the Esc |
31 | key or by clicking the close button. | 31 | key or by clicking the close button. |
32 | 32 | ||
33 | # FIXME: the PersistentTooltip should be disabled when the user clicks anywhere off | 33 | # FIXME: the PersistentTooltip should be disabled when the user clicks anywhere off |
34 | # it. We can't do this with focus-out-event becuase modal ensures we have focus? | 34 | # it. We can't do this with focus-out-event becuase modal ensures we have focus? |
35 | 35 | ||
36 | markup: some Pango text markup to display in the tooltip | 36 | markup: some Pango text markup to display in the tooltip |
37 | """ | 37 | """ |
38 | def __init__(self, markup): | 38 | def __init__(self, markup): |
39 | gtk.Window.__init__(self, gtk.WINDOW_POPUP) | 39 | gtk.Window.__init__(self, gtk.WINDOW_POPUP) |
40 | 40 | ||
41 | # Inherit the system theme for a tooltip | 41 | # Inherit the system theme for a tooltip |
42 | style = gtk.rc_get_style_by_paths(gtk.settings_get_default(), | 42 | style = gtk.rc_get_style_by_paths(gtk.settings_get_default(), |
43 | 'gtk-tooltip', 'gtk-tooltip', gobject.TYPE_NONE) | 43 | 'gtk-tooltip', 'gtk-tooltip', gobject.TYPE_NONE) |
44 | self.set_style(style) | 44 | self.set_style(style) |
45 | 45 | ||
46 | # The placement of the close button on the tip should reflect how the | 46 | # The placement of the close button on the tip should reflect how the |
47 | # window manager of the users system places close buttons. Try to read | 47 | # window manager of the users system places close buttons. Try to read |
48 | # the metacity gconf key to determine whether the close button is on the | 48 | # the metacity gconf key to determine whether the close button is on the |
49 | # left or the right. | 49 | # left or the right. |
50 | # In the case that we can't determine the users configuration we default | 50 | # In the case that we can't determine the users configuration we default |
51 | # to close buttons being on the right. | 51 | # to close buttons being on the right. |
52 | __button_right = True | 52 | __button_right = True |
53 | try: | 53 | try: |
54 | client = gconf.client_get_default() | 54 | client = gconf.client_get_default() |
55 | order = client.get_string("/apps/metacity/general/button_layout") | 55 | order = client.get_string("/apps/metacity/general/button_layout") |
56 | if order and order.endswith(":"): | 56 | if order and order.endswith(":"): |
57 | __button_right = False | 57 | __button_right = False |
58 | except NameError: | 58 | except NameError: |
59 | pass | 59 | pass |
60 | 60 | ||
61 | # We need to ensure we're only shown once | 61 | # We need to ensure we're only shown once |
62 | self.shown = False | 62 | self.shown = False |
63 | 63 | ||
64 | # We don't want any WM decorations | 64 | # We don't want any WM decorations |
65 | self.set_decorated(False) | 65 | self.set_decorated(False) |
66 | # We don't want to show in the taskbar or window switcher | 66 | # We don't want to show in the taskbar or window switcher |
67 | self.set_skip_pager_hint(True) | 67 | self.set_skip_pager_hint(True) |
68 | self.set_skip_taskbar_hint(True) | 68 | self.set_skip_taskbar_hint(True) |
69 | # We must be modal to ensure we grab focus when presented from a gtk.Dialog | 69 | # We must be modal to ensure we grab focus when presented from a gtk.Dialog |
70 | self.set_modal(True) | 70 | self.set_modal(True) |
71 | 71 | ||
72 | self.set_border_width(0) | 72 | self.set_border_width(0) |
73 | self.set_position(gtk.WIN_POS_MOUSE) | 73 | self.set_position(gtk.WIN_POS_MOUSE) |
74 | self.set_opacity(0.95) | 74 | self.set_opacity(0.95) |
75 | 75 | ||
76 | # Draw our label and close buttons | 76 | # Draw our label and close buttons |
77 | hbox = gtk.HBox(False, 0) | 77 | hbox = gtk.HBox(False, 0) |
78 | hbox.show() | 78 | hbox.show() |
79 | vbox = gtk.VBox(False, 0) | 79 | vbox = gtk.VBox(False, 0) |
80 | vbox.show() | 80 | vbox.show() |
81 | vbox.pack_start(hbox, True, True, 0) | 81 | vbox.pack_start(hbox, True, True, 0) |
82 | 82 | ||
83 | img = gtk.Image() | 83 | img = gtk.Image() |
84 | img.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_BUTTON) | 84 | img.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_BUTTON) |
85 | 85 | ||
86 | self.button = gtk.Button() | 86 | self.button = gtk.Button() |
87 | self.button.set_image(img) | 87 | self.button.set_image(img) |
88 | self.button.connect("clicked", self._dismiss_cb) | 88 | self.button.connect("clicked", self._dismiss_cb) |
89 | self.button.set_can_default(True) | 89 | self.button.set_can_default(True) |
90 | self.button.grab_focus() | 90 | self.button.grab_focus() |
91 | self.button.show() | 91 | self.button.show() |
92 | if __button_right: | 92 | if __button_right: |
93 | hbox.pack_end(self.button, False, False, 0) | 93 | hbox.pack_end(self.button, False, False, 0) |
94 | else: | 94 | else: |
95 | hbox.pack_start(self.button, False, False, 0) | 95 | hbox.pack_start(self.button, False, False, 0) |
96 | 96 | ||
97 | self.set_default(self.button) | 97 | self.set_default(self.button) |
98 | 98 | ||
99 | hbox = gtk.HBox(True, 6) | 99 | hbox = gtk.HBox(True, 6) |
100 | hbox.set_border_width(6) | 100 | hbox.set_border_width(6) |
101 | hbox.show() | 101 | hbox.show() |
102 | vbox.pack_end(hbox, True, True, 6) | 102 | vbox.pack_end(hbox, True, True, 6) |
103 | self.label = gtk.Label() | 103 | self.label = gtk.Label() |
104 | # We want to match the colours of the normal tooltips, as dictated by | 104 | # We want to match the colours of the normal tooltips, as dictated by |
105 | # the users gtk+-2.0 theme, wherever possible - on some systems this | 105 | # the users gtk+-2.0 theme, wherever possible - on some systems this |
106 | # requires explicitly setting a fg_color for the label which matches the | 106 | # requires explicitly setting a fg_color for the label which matches the |
107 | # tooltip_fg_color | 107 | # tooltip_fg_color |
108 | settings = gtk.settings_get_default() | 108 | settings = gtk.settings_get_default() |
109 | colours = settings.get_property('gtk-color-scheme').split('\n') | 109 | colours = settings.get_property('gtk-color-scheme').split('\n') |
110 | # remove any empty lines, there's likely to be a trailing one after | 110 | # remove any empty lines, there's likely to be a trailing one after |
111 | # calling split on a dictionary-like string | 111 | # calling split on a dictionary-like string |
112 | colours = filter(None, colours) | 112 | colours = filter(None, colours) |
113 | for col in colours: | 113 | for col in colours: |
114 | item, val = col.split(': ') | 114 | item, val = col.split(': ') |
115 | if item == 'tooltip_fg_color': | 115 | if item == 'tooltip_fg_color': |
116 | style = self.label.get_style() | 116 | style = self.label.get_style() |
117 | style.fg[gtk.STATE_NORMAL] = gtk.gdk.color_parse(val) | 117 | style.fg[gtk.STATE_NORMAL] = gtk.gdk.color_parse(val) |
118 | self.label.set_style(style) | 118 | self.label.set_style(style) |
119 | break # we only care for the tooltip_fg_color | 119 | break # we only care for the tooltip_fg_color |
120 | self.label.set_markup(markup) | 120 | self.label.set_markup(markup) |
121 | self.label.show() | 121 | self.label.show() |
122 | hbox.pack_end(self.label, True, True, 6) | 122 | hbox.pack_end(self.label, True, True, 6) |
123 | 123 | ||
124 | self.connect("key-press-event", self._catch_esc_cb) | 124 | self.connect("key-press-event", self._catch_esc_cb) |
125 | 125 | ||
126 | self.add(vbox) | 126 | self.add(vbox) |
127 | 127 | ||
128 | """ | 128 | """ |
129 | Callback when the PersistentTooltip's close button is clicked. | 129 | Callback when the PersistentTooltip's close button is clicked. |
130 | Hides the PersistentTooltip. | 130 | Hides the PersistentTooltip. |
131 | """ | 131 | """ |
132 | def _dismiss_cb(self, button): | 132 | def _dismiss_cb(self, button): |
133 | self.hide() | 133 | self.hide() |
134 | return True | 134 | return True |
135 | 135 | ||
136 | """ | 136 | """ |
137 | Callback when the Esc key is detected. Hides the PersistentTooltip. | 137 | Callback when the Esc key is detected. Hides the PersistentTooltip. |
138 | """ | 138 | """ |
139 | def _catch_esc_cb(self, widget, event): | 139 | def _catch_esc_cb(self, widget, event): |
140 | keyname = gtk.gdk.keyval_name(event.keyval) | 140 | keyname = gtk.gdk.keyval_name(event.keyval) |
141 | if keyname == "Escape": | 141 | if keyname == "Escape": |
142 | self.hide() | 142 | self.hide() |
143 | return True | 143 | return True |
144 | 144 | ||
145 | """ | 145 | """ |
146 | Called to present the PersistentTooltip. | 146 | Called to present the PersistentTooltip. |
147 | Overrides the superclasses show() method to include state tracking. | 147 | Overrides the superclasses show() method to include state tracking. |
148 | """ | 148 | """ |
149 | def show(self): | 149 | def show(self): |
150 | if not self.shown: | 150 | if not self.shown: |
151 | self.shown = True | 151 | self.shown = True |
152 | gtk.Window.show(self) | 152 | gtk.Window.show(self) |
153 | 153 | ||
154 | """ | 154 | """ |
155 | Called to hide the PersistentTooltip. | 155 | Called to hide the PersistentTooltip. |
156 | Overrides the superclasses hide() method to include state tracking. | 156 | Overrides the superclasses hide() method to include state tracking. |
157 | """ | 157 | """ |
158 | def hide(self): | 158 | def hide(self): |
159 | self.shown = False | 159 | self.shown = False |
160 | gtk.Window.hide(self) | 160 | gtk.Window.hide(self) |