[gcalctool] Make scientific notation button behave the same as keyboard shortcut (i.e. go into superscript mode)
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gcalctool] Make scientific notation button behave the same as keyboard shortcut (i.e. go into superscript mode)
- Date: Tue, 23 Feb 2010 01:14:31 +0000 (UTC)
commit 8b09d6b78e9483b2b986102e1d05821b17fa0cad
Author: Robert Ancell <robert ancell gmail com>
Date: Tue Feb 23 12:14:05 2010 +1100
Make scientific notation button behave the same as keyboard shortcut (i.e. go into superscript mode).
Only allow superscript minus to be entered if can make a valid superscript number, otherwise revert to standard minus.
NEWS | 6 ++++
data/gcalctool.ui | 4 +-
src/gtk.c | 71 ++++++++++++++++++++++++++++++++++++++++++++---------
3 files changed, 67 insertions(+), 14 deletions(-)
---
diff --git a/NEWS b/NEWS
index 7bcf80d..c4ec1da 100644
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,12 @@ Overview of changes in gcalctool 5.29.92
* Add shortcuts to change base (Ctrl+B, Ctrl+O, Ctrl+D, Ctrl+H), and change
the displayed number base on results.
+
+ * Make scientific notation button behave the same as keyboard shortcut (i.e.
+ go into superscript mode).
+
+ * Only allow superscript minus to be entered if can make a valid superscript
+ number, otherwise revert to standard minus.
Overview of changes in gcalctool 5.29.91
diff --git a/data/gcalctool.ui b/data/gcalctool.ui
index 37983b6..eeeeb73 100644
--- a/data/gcalctool.ui
+++ b/data/gcalctool.ui
@@ -2333,7 +2333,7 @@
<property name="border_width">3</property>
<property name="use_underline">True</property>
<property name="focus_on_click">False</property>
- <signal name="clicked" handler="button_cb"/>
+ <signal name="clicked" handler="subtract_cb"/>
</object>
<packing>
<property name="left_attach">3</property>
@@ -2841,7 +2841,7 @@
<property name="AtkObject::accessible-name" translatable="yes" comments="Accessible name for the scientific exponent button">Scientific Exponent</property>
</object>
</child>
- <signal name="clicked" handler="button_cb"/>
+ <signal name="clicked" handler="exponent_cb"/>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
diff --git a/src/gtk.c b/src/gtk.c
index f001525..2bede45 100644
--- a/src/gtk.c
+++ b/src/gtk.c
@@ -56,12 +56,10 @@ static ButtonData button_data[] = {
{"ans", "ans"},
{"numeric_point", "."},
{"add", "+"},
- {"subtract", "â??"},
{"multiply", "Ã?"},
{"divide", "÷"},
{"modulus_divide", " mod "},
{"x_pow_y", "^"},
- {"exponential", "Ã?10^"},
{"percentage", "%"},
{"factorial", "!"},
{"abs", "|"},
@@ -173,6 +171,8 @@ typedef struct {
GtkWidget *superscript_toggle;
GtkWidget *subscript_toggle;
+ gboolean can_super_minus;
+
/* Labels for popup menus */
GtkWidget *memory_store_labels[MAX_REGISTERS];
GtkWidget *memory_recall_labels[MAX_REGISTERS];
@@ -216,8 +216,8 @@ typedef enum {
CURRENCY_TARGET_LOWER
} CurrencyTargetRow;
-static const char *subscript_digits[] = {"â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??"};
-static const char *superscript_digits[] = {"�", "¹", "²", "³", "�", "�", "�", "�", "�", "�"};
+static const char *subscript_digits[] = {"â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", NULL};
+static const char *superscript_digits[] = {"�", "¹", "²", "³", "�", "�", "�", "�", "�", "�", NULL};
static void load_ui(GtkBuilder *ui, const gchar *filename)
{
@@ -371,6 +371,10 @@ do_button(int function, gpointer arg)
{
GtkTextIter start, end;
gint cursor_start, cursor_end;
+
+ /* Can't enter superscript minus after entering digits */
+ if (function == FN_TEXT && strstr("�¹²³������", (char *)arg) != NULL)
+ X.can_super_minus = FALSE;
/* Disable super/subscript mode when finished entering */
if (function == FN_CALCULATE ||
@@ -814,8 +818,12 @@ G_MODULE_EXPORT
void
set_superscript_cb(GtkWidget *widget)
{
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
+ X.can_super_minus = TRUE;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(X.subscript_toggle), FALSE);
+ }
+ else
+ X.can_super_minus = FALSE;
}
@@ -1161,6 +1169,28 @@ do_base(gint base)
}
+static void
+do_exponent()
+{
+ do_text("Ã?10");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(X.superscript_toggle), TRUE);
+}
+
+
+static void
+do_subtract()
+{
+ if (X.can_super_minus) {
+ do_text("â?»");
+ X.can_super_minus = FALSE;
+ }
+ else {
+ do_text("â??");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(X.superscript_toggle), FALSE);
+ }
+}
+
+
G_MODULE_EXPORT
void
base_cb(GtkWidget *widget, GdkEventButton *event)
@@ -1171,6 +1201,22 @@ base_cb(GtkWidget *widget, GdkEventButton *event)
G_MODULE_EXPORT
void
+exponent_cb(GtkWidget *widget, GdkEventButton *event)
+{
+ do_exponent();
+}
+
+
+G_MODULE_EXPORT
+void
+subtract_cb(GtkWidget *widget, GdkEventButton *event)
+{
+ do_subtract();
+}
+
+
+G_MODULE_EXPORT
+void
button_cb(GtkWidget *widget, GdkEventButton *event)
{
do_text(g_object_get_data(G_OBJECT(widget), "calc_text"));
@@ -1193,8 +1239,8 @@ gboolean
main_window_key_press_cb(GtkWidget *widget, GdkEventKey *event)
{
int i, state;
- const char *conversions[] = {"-", "*", "/", NULL};
- const char *conversion_values[] = {"â??", "Ã?", "÷", NULL };
+ const char *conversions[] = {"*", "/", NULL};
+ const char *conversion_values[] = {"�", "÷", NULL };
/* Only look at the modifiers we use */
state = event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK);
@@ -1218,8 +1264,7 @@ main_window_key_press_cb(GtkWidget *widget, GdkEventKey *event)
do_base(10);
return TRUE;
case GDK_e:
- do_text("Ã?10");
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(X.superscript_toggle), TRUE);
+ do_exponent();
return TRUE;
case GDK_f:
do_button(FN_FACTORIZE, NULL);
@@ -1248,9 +1293,6 @@ main_window_key_press_cb(GtkWidget *widget, GdkEventKey *event)
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(X.superscript_toggle))) {
switch(event->keyval)
{
- case GDK_minus:
- do_text("â?»");
- return TRUE;
case GDK_0:
do_text("â?°");
return TRUE;
@@ -1355,6 +1397,11 @@ main_window_key_press_cb(GtkWidget *widget, GdkEventKey *event)
// FIXME: event->string deprecated
+ if (strcmp(event->string, "-") == 0 || strcmp(event->string, "â??") == 0) {
+ do_subtract();
+ return TRUE;
+ }
+
for (i = 0; conversions[i]; i++) {
if (strcmp(event->string, conversions[i]) == 0) {
do_text(conversion_values[i]);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]