editor: deactivate old text model before activating the new one
authorPhilipp Brüschweiler <blei42@gmail.com>
Wed, 11 Jul 2012 20:25:29 +0000 (22:25 +0200)
committerKristian Høgsberg <krh@bitplanet.net>
Sun, 22 Jul 2012 15:47:31 +0000 (11:47 -0400)
clients/editor.c

index 145ba20..9498d53 100644 (file)
@@ -20,6 +20,7 @@
  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
+#include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -233,22 +234,29 @@ button_handler(struct widget *widget,
        x -= allocation.x;
        y -= allocation.y;
 
-       editor->entry->active = 0;
-       editor->editor->active = 0;
-
-       editor->entry->active = rectangle_contains(&editor->entry->allocation, x, y);
-       editor->editor->active = rectangle_contains(&editor->editor->allocation, x, y);
-
-       if (editor->entry->active) {
-               text_entry_activate(editor->entry);
-       } else {
-               text_entry_deactivate(editor->entry);
-       }
-       if (editor->editor->active) {
-               text_entry_activate(editor->editor);
+       int32_t activate_entry = rectangle_contains(&editor->entry->allocation, x, y);
+       int32_t activate_editor = rectangle_contains(&editor->editor->allocation, x, y);
+       assert(!(activate_entry && activate_editor));
+
+       if (activate_entry) {
+               if (editor->editor->active)
+                       text_entry_deactivate(editor->editor);
+               if (!editor->entry->active)
+                       text_entry_activate(editor->entry);
+       } else if (activate_editor) {
+               if (editor->entry->active)
+                       text_entry_deactivate(editor->entry);
+               if (!editor->editor->active)
+                       text_entry_activate(editor->editor);
        } else {
-               text_entry_deactivate(editor->editor);
+               if (editor->entry->active)
+                       text_entry_deactivate(editor->entry);
+               if (editor->editor->active)
+                       text_entry_deactivate(editor->editor);
        }
+       editor->entry->active = activate_entry;
+       editor->editor->active = activate_editor;
+       assert(!(editor->entry->active && editor->editor->active));
 
        widget_schedule_redraw(widget);
 }