projects
/
rodin
/
chimara.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Paging is slowly becoming better, but still susceptible to race conditions
[rodin/chimara.git]
/
libchimara
/
input.c
diff --git
a/libchimara/input.c
b/libchimara/input.c
index 8b6d4c27662d5296e4b7df1a0ec0caedf40c6b7e..43ed0453ddcc56a43394809eac0af3e916371884 100644
(file)
--- a/
libchimara/input.c
+++ b/
libchimara/input.c
@@
-1,6
+1,7
@@
#include "charset.h"
#include "magic.h"
#include "input.h"
#include "charset.h"
#include "magic.h"
#include "input.h"
+#include "pager.h"
#include "chimara-glk-private.h"
extern GPrivate *glk_data_key;
#include "chimara-glk-private.h"
extern GPrivate *glk_data_key;
@@
-32,6
+33,12
@@
request_char_event_common(winid_t win, gboolean unicode)
/* Emit the "waiting" signal to let listeners know we are ready for input */
g_signal_emit_by_name(glk_data->self, "waiting");
/* Emit the "waiting" signal to let listeners know we are ready for input */
g_signal_emit_by_name(glk_data->self, "waiting");
+
+ /* Schedule a check for the pager */
+ /*
+ if(win->type == wintype_TextBuffer)
+ g_idle_add(pager_check, win);
+ */
}
/**
}
/**
@@
-196,6
+203,11
@@
text_buffer_request_line_event_common(winid_t win, glui32 maxlen, gboolean inser
gtk_widget_grab_focus(win->widget);
gdk_threads_leave();
gtk_widget_grab_focus(win->widget);
gdk_threads_leave();
+
+ /* Schedule a check for the pager */
+ /*
+ g_idle_add(pager_check, win);
+ */
}
/**
}
/**
@@
-293,6
+305,8
@@
glk_request_line_event_uni(winid_t win, glui32 *buf, glui32 maxlen, glui32 initl
if(glk_data->register_arr)
win->buffer_rock = (*glk_data->register_arr)(buf, maxlen, "&+#!Iu");
if(glk_data->register_arr)
win->buffer_rock = (*glk_data->register_arr)(buf, maxlen, "&+#!Iu");
+
+
win->input_request_type = INPUT_REQUEST_LINE_UNICODE;
win->line_input_buffer_unicode = buf;
win->line_input_buffer_max_len = maxlen;
win->input_request_type = INPUT_REQUEST_LINE_UNICODE;
win->line_input_buffer_unicode = buf;
win->line_input_buffer_max_len = maxlen;
@@
-417,6
+431,11
@@
on_shutdown_key_press_event(GtkWidget *widget, GdkEventKey *event, winid_t win)
gboolean
on_char_input_key_press_event(GtkWidget *widget, GdkEventKey *event, winid_t win)
{
gboolean
on_char_input_key_press_event(GtkWidget *widget, GdkEventKey *event, winid_t win)
{
+ /* Ignore modifier keys, otherwise the char input will already trigger on
+ the shift key when the user tries to type a capital letter */
+ if(event->is_modifier)
+ return FALSE; /* don't stop the event */
+
glui32 keycode = keyval_to_glk_keycode(event->keyval, win->input_request_type == INPUT_REQUEST_CHARACTER_UNICODE);
ChimaraGlk *glk = CHIMARA_GLK(gtk_widget_get_ancestor(widget, CHIMARA_TYPE_GLK));
glui32 keycode = keyval_to_glk_keycode(event->keyval, win->input_request_type == INPUT_REQUEST_CHARACTER_UNICODE);
ChimaraGlk *glk = CHIMARA_GLK(gtk_widget_get_ancestor(widget, CHIMARA_TYPE_GLK));