@@ -31,6 +31,73 @@ class "MeldStatusBar" style "meld-statusbar-style"
3131 """ )
3232
3333
34+ class MeldStatusMenuButton (Gtk .MenuButton ):
35+ """Compact menu button with arrow indicator for use in a status bar
36+
37+ Implementation based on gedit-status-menu-button.c
38+ Copyright (C) 2008 - Jesse van den Kieboom
39+ """
40+
41+ __gtype_name__ = "MeldStatusMenuButton"
42+
43+ style = b"""
44+ * {
45+ padding: 1px 8px 2px 4px;
46+ border: 0;
47+ outline-width: 0;
48+ }
49+ """
50+
51+ css_provider = Gtk .CssProvider ()
52+ css_provider .load_from_data (style )
53+
54+ def get_label (self ):
55+ return self ._label .get_text ()
56+
57+ def set_label (self , markup ):
58+ if markup == self ._label .get_text ():
59+ return
60+ self ._label .set_markup (markup )
61+
62+ label = GObject .property (
63+ type = str ,
64+ nick = "The GtkSourceLanguage displayed in the status bar" ,
65+ default = None ,
66+ getter = get_label ,
67+ setter = set_label ,
68+ )
69+
70+ def __init__ (self ):
71+ Gtk .MenuButton .__init__ (self )
72+
73+ style_context = self .get_style_context ()
74+ style_context .add_provider (
75+ self .css_provider , Gtk .STYLE_PROVIDER_PRIORITY_APPLICATION )
76+ style_context .add_class ('flat' )
77+
78+ # Ideally this would be a template child, but there's still no
79+ # Python support for this.
80+ label = Gtk .Label ()
81+ label .props .single_line_mode = True
82+ label .props .halign = Gtk .Align .START
83+ label .props .valign = Gtk .Align .BASELINE
84+
85+ arrow = Gtk .Image .new_from_icon_name (
86+ 'pan-down-symbolic' , Gtk .IconSize .SMALL_TOOLBAR )
87+ arrow .props .valign = Gtk .Align .BASELINE
88+
89+ box = Gtk .Box ()
90+ box .set_spacing (3 )
91+ box .add (label )
92+ box .add (arrow )
93+ box .show_all ()
94+
95+ self .remove (self .get_child ())
96+ self .add (box )
97+
98+ self ._label = label
99+
100+
34101class MeldStatusBar (Gtk .Statusbar ):
35102 __gtype_name__ = "MeldStatusBar"
36103
@@ -85,7 +152,7 @@ def get_language_label(binding, language, *args):
85152 return _ ("Plain Text" )
86153 return language .get_name ()
87154
88- button = Gtk . MenuButton ()
155+ button = MeldStatusMenuButton ()
89156 self .bind_property (
90157 'source-language' , button , 'label' , GObject .BindingFlags .DEFAULT ,
91158 get_language_label )
0 commit comments