static E_Illume_Keyboard *_e_mod_kbd_by_border_get(E_Border *bd);
static void _e_mod_kbd_border_adopt(E_Border *bd);
static void _e_mod_kbd_layout_send(void);
+static void _e_mod_kbd_geometry_send(void);
/* local variables */
static Eina_List *_kbd_hdls = NULL;
_e_illume_kbd->visible = 1;
_e_mod_kbd_layout_send();
+ _e_mod_kbd_geometry_send();
/* tell the focused border it changed so layout gets udpated */
if (_focused_border)
if (_e_illume_kbd->border)
ecore_x_e_virtual_keyboard_state_send(_e_illume_kbd->border->client.win, type);
}
+
+static void
+_e_mod_kbd_geometry_send(void)
+{
+ E_Zone *zone;
+ int y = 0;
+
+ /* make sure we have a keyboard border */
+ if (!_e_illume_kbd->border) return;
+
+ /* adjust Y for keyboard visibility */
+ if (_e_illume_kbd->border->fx.y <= 0)
+ y = _e_illume_kbd->border->y;
+
+ if (_focused_border) zone = _focused_border->zone;
+ else zone = _e_illume_kbd->border->zone;
+
+ ecore_x_e_illume_keyboard_geometry_set(zone->black_win,
+ _e_illume_kbd->border->x, y,
+ _e_illume_kbd->border->w,
+ _e_illume_kbd->border->h);
+}
ecore_x_e_illume_softkey_geometry_set(bd->client.win, x, y, w, h);
}
}
+ else if (event->atom == ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY)
+ {
+ Eina_List *l;
+ E_Zone *zone;
+ E_Border *bd;
+ int x, y, w, h;
+
+ /* make sure this property changed on a zone */
+ if (!(zone = e_util_zone_window_find(event->win))) return;
+
+ /* get the geometry. This is X round-trip :( */
+ ecore_x_e_illume_keyboard_geometry_get(zone->black_win, &x, &y, &w, &h);
+
+ /* look for conformant borders */
+ EINA_LIST_FOREACH(e_border_client_list(), l, bd)
+ {
+ if (bd->zone != zone) continue;
+ if (!e_illume_border_is_conformant(bd)) continue;
+ /* set keyboard geometry on conformant window */
+ /* NB: This is needed so that conformant apps get told about
+ * the keyboard size/position...else they have no way of
+ * knowing that the geometry has been updated */
+ ecore_x_e_illume_keyboard_geometry_set(bd->client.win, x, y, w, h);
+ }
+ }
else if (!strcmp(ecore_x_atom_name_get(event->atom), "ENLIGHTENMENT_SCALE"))
{
Eina_List *ml;