Don't hide keyboard right away
instead keep it around for 200ms. This reduces flicker a lot since the keyboard will not hide when switching through input fields in e.g. contacts or chatty.
This commit is contained in:
@ -40,6 +40,7 @@ struct _ServerContextService {
|
|||||||
|
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
GtkWidget *widget;
|
GtkWidget *widget;
|
||||||
|
guint hiding;
|
||||||
|
|
||||||
gdouble size_constraint_landscape[2];
|
gdouble size_constraint_landscape[2];
|
||||||
gdouble size_constraint_portrait[2];
|
gdouble size_constraint_portrait[2];
|
||||||
@ -245,6 +246,11 @@ server_context_service_real_show_keyboard (EekboardContextService *_context)
|
|||||||
{
|
{
|
||||||
ServerContextService *context = SERVER_CONTEXT_SERVICE(_context);
|
ServerContextService *context = SERVER_CONTEXT_SERVICE(_context);
|
||||||
|
|
||||||
|
if (context->hiding) {
|
||||||
|
g_source_remove (context->hiding);
|
||||||
|
context->hiding = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!context->window)
|
if (!context->window)
|
||||||
make_window (context);
|
make_window (context);
|
||||||
if (!context->widget)
|
if (!context->widget)
|
||||||
@ -255,12 +261,22 @@ server_context_service_real_show_keyboard (EekboardContextService *_context)
|
|||||||
gtk_widget_show (context->window);
|
gtk_widget_show (context->window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
on_hide (ServerContextService *context)
|
||||||
|
{
|
||||||
|
gtk_widget_hide (context->window);
|
||||||
|
context->hiding = 0;
|
||||||
|
|
||||||
|
return G_SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
server_context_service_real_hide_keyboard (EekboardContextService *_context)
|
server_context_service_real_hide_keyboard (EekboardContextService *_context)
|
||||||
{
|
{
|
||||||
ServerContextService *context = SERVER_CONTEXT_SERVICE(_context);
|
ServerContextService *context = SERVER_CONTEXT_SERVICE(_context);
|
||||||
|
|
||||||
gtk_widget_hide (context->window);
|
if (!context->hiding)
|
||||||
|
context->hiding = g_timeout_add (200, (GSourceFunc) on_hide, context);
|
||||||
|
|
||||||
EEKBOARD_CONTEXT_SERVICE_CLASS (server_context_service_parent_class)->
|
EEKBOARD_CONTEXT_SERVICE_CLASS (server_context_service_parent_class)->
|
||||||
hide_keyboard (_context);
|
hide_keyboard (_context);
|
||||||
|
|||||||
Reference in New Issue
Block a user