[gcalctool] Fix up variable popup so it can get keyboard focus



commit 8e2f931121d63acd1a41fa8105e33fbf8c0ee80e
Author: Robert Ancell <robert ancell canonical com>
Date:   Wed Jan 5 15:01:31 2011 +1100

    Fix up variable popup so it can get keyboard focus

 src/math-buttons.c        |    1 +
 src/math-variable-popup.c |   25 +++++++++++++++++++------
 2 files changed, 20 insertions(+), 6 deletions(-)
---
diff --git a/src/math-buttons.c b/src/math-buttons.c
index a10806e..57e859e 100644
--- a/src/math-buttons.c
+++ b/src/math-buttons.c
@@ -1066,6 +1066,7 @@ memory_cb(GtkWidget *widget, MathButtons *buttons)
 
     popup = math_variable_popup_new(buttons->priv->equation);
     set_tint(GTK_WIDGET(popup), &buttons->priv->color_memory, 1);
+    gtk_window_set_transient_for(GTK_WINDOW(popup), GTK_WINDOW(gtk_widget_get_toplevel(widget)));
 
     gtk_widget_get_allocation(widget, &allocation); 
     gdk_window_get_root_coords(gtk_widget_get_window(widget), allocation.x, allocation.y, &x, &y);
diff --git a/src/math-variable-popup.c b/src/math-variable-popup.c
index a42add3..c3121de 100644
--- a/src/math-variable-popup.c
+++ b/src/math-variable-popup.c
@@ -39,10 +39,10 @@ G_DEFINE_TYPE (MathVariablePopup, math_variable_popup, GTK_TYPE_WINDOW);
 MathVariablePopup *
 math_variable_popup_new(MathEquation *equation)
 {
-    return g_object_new(math_variable_popup_get_type(), "type", GTK_WINDOW_POPUP, "equation", equation, NULL);
+    return g_object_new(math_variable_popup_get_type(), "equation", equation, NULL);
 }
 
-//FIXME
+
 static void
 variable_focus_out_event_cb(GtkWidget *widget, GdkEventFocus *event, MathVariablePopup *popup)
 {
@@ -63,6 +63,14 @@ insert_variable_cb(GtkWidget *widget, MathVariablePopup *popup)
 
 
 static void
+variable_name_changed_cb(GtkWidget *widget, MathVariablePopup *popup)
+{
+    const gchar *text = gtk_entry_get_text(GTK_ENTRY(popup->priv->variable_name_entry));
+    gtk_widget_set_sensitive(popup->priv->add_variable_button, text[0] != '\0');
+}
+                         
+
+static void
 add_variable_cb(GtkWidget *widget, MathVariablePopup *popup)
 {
     const gchar *name;
@@ -202,10 +210,10 @@ math_variable_popup_set_property(GObject      *object,
         entry = gtk_hbox_new(FALSE, 6);
         gtk_widget_show(entry);
 
-        // FIXME: Set add button sensitivity based on text being present
-        // FIXME: Show greyed "variable name" text to give user a hint how to use
-        // FIXME: Activate on enter
+        // TODO: Show greyed "variable name" text to give user a hint how to use
         self->priv->variable_name_entry = gtk_entry_new();
+        g_signal_connect(G_OBJECT(self->priv->variable_name_entry), "changed", G_CALLBACK(variable_name_changed_cb), self);
+        g_signal_connect(G_OBJECT(self->priv->variable_name_entry), "activate", G_CALLBACK(add_variable_cb), self);
         gtk_box_pack_start(GTK_BOX(entry), self->priv->variable_name_entry, TRUE, TRUE, 0);
         gtk_widget_show(self->priv->variable_name_entry);
 
@@ -280,8 +288,13 @@ math_variable_popup_init(MathVariablePopup *popup)
 {
     popup->priv = G_TYPE_INSTANCE_GET_PRIVATE(popup, math_variable_popup_get_type(), MathVariablePopupPrivate);
 
+    gtk_window_set_decorated(GTK_WINDOW(popup), FALSE);
+    gtk_window_set_skip_taskbar_hint(GTK_WINDOW(popup), TRUE);
+
     gtk_container_set_border_width(GTK_CONTAINER(popup), 6);
-    g_signal_connect(G_OBJECT(popup), "focus-out-event", G_CALLBACK(variable_focus_out_event_cb), popup); // FIXME
+
+    /* Destroy this window when it loses focus */
+    g_signal_connect(G_OBJECT(popup), "focus-out-event", G_CALLBACK(variable_focus_out_event_cb), popup);
 
     popup->priv->vbox = gtk_vbox_new(TRUE, 6);
     gtk_container_add(GTK_CONTAINER(popup), popup->priv->vbox);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]