aboutsummaryrefslogtreecommitdiff
path: root/src/flat-button.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/flat-button.vala')
-rw-r--r--src/flat-button.vala66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/flat-button.vala b/src/flat-button.vala
new file mode 100644
index 0000000..3a718d2
--- /dev/null
+++ b/src/flat-button.vala
@@ -0,0 +1,66 @@
+/* -*- Mode: Vala; indent-tabs-mode: nil; tab-width: 4 -*-
+ *
+ * Copyright (C) 2012 Canonical Ltd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors: Michael Terry <michael.terry@canonical.com>
+ */
+
+public class FlatButton : Gtk.Button
+{
+ private bool did_press;
+
+ construct
+ {
+ UnityGreeter.add_style_class (this);
+ try
+ {
+ var style = new Gtk.CssProvider ();
+ style.load_from_data ("* {-GtkButton-child-displacement-x: 0px;
+ -GtkButton-child-displacement-y: 0px;
+ -GtkWidget-focus-line-width: 1px;
+ }", -1);
+ get_style_context ().add_provider (style, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+ }
+ catch (Error e)
+ {
+ debug ("Internal error loading session chooser style: %s", e.message);
+ }
+ }
+
+ public override bool draw (Cairo.Context c)
+ {
+ // Make sure we don't react to mouse hovers
+ unset_state_flags (Gtk.StateFlags.PRELIGHT);
+ return base.draw (c);
+ }
+
+ public override void pressed ()
+ {
+ // Do nothing. The normal handler sets priv->button_down which
+ // internally causes draw() to draw a special border and background
+ // that we don't want.
+ did_press = true;
+ }
+
+ public override void released ()
+ {
+ if (did_press)
+ {
+ base.pressed (); // fake an insta-click
+ did_press = false;
+ }
+ base.released ();
+ }
+}