[PATCH 1/2] text: add assigned_seat event to the input_method interface
Philipp Brüschweiler
blei42 at gmail.com
Mon Aug 13 05:35:48 PDT 2012
Hi Jan,
Thanks for your review. I'll follow up with a new version of some
cleanups related to multiple seats. IM Context patches will follow
later.
Cheers,
Philipp
On Mon, Aug 13, 2012 at 10:10 AM, Jan Arne Petersen
<jpetersen at openismus.com> wrote:
> Hi Philipp,
>
> I do not think it is a realistic scenario to have one virtual keyboard
> surface forwarding the input to different entries depending on which
> seat the touch/mouse-event comes from. We would rather have one virtual
> keyboard surface per seat (on different outputs). For the demo keyboard
> it would be ok to just react to input from all seats and forward to all
> active text_models (as long as we do not have a virtual keyboard surface
> per seat). I think that should both be possible with just the
> input_method_context interface we talked about on Friday.
>
> Best regards,
> Jan Arne
>
>
> On 08/11/2012 12:12 PM, Philipp Brüschweiler wrote:
>> This event notifies the input method to which seat it is assigned. This
>> is necessary to distinguish multiple input methods when multiple seats
>> are used.
>> ---
>> protocol/text.xml | 4 ++++
>> src/text-backend.c | 23 +++++++++++++++++------
>> 2 Dateien geändert, 21 Zeilen hinzugefügt(+), 6 Zeilen entfernt(-)
>>
>> diff --git a/protocol/text.xml b/protocol/text.xml
>> index e73cacb..8dbb9fb 100644
>> --- a/protocol/text.xml
>> +++ b/protocol/text.xml
>> @@ -55,5 +55,9 @@
>> <arg name="text" type="string"/>
>> <arg name="index" type="uint"/>
>> </request>
>> +
>> + <event name="assigned_seat">
>> + <arg name="seat" type="object" interface="wl_seat"/>
>> + </event>
>> </interface>
>> </protocol>
>> diff --git a/src/text-backend.c b/src/text-backend.c
>> index ddeec20..9c78018 100644
>> --- a/src/text-backend.c
>> +++ b/src/text-backend.c
>> @@ -20,6 +20,7 @@
>> * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
>> */
>>
>> +#include <assert.h>
>> #include <stdlib.h>
>>
>> #include "compositor.h"
>> @@ -44,6 +45,7 @@ struct input_method {
>> struct wl_listener destroy_listener;
>>
>> struct weston_compositor *ec;
>> + struct weston_seat *seat;
>> struct text_model *model;
>>
>> struct wl_list link;
>> @@ -257,20 +259,28 @@ bind_input_method(struct wl_client *client,
>> {
>> struct input_method *input_method = data;
>> struct wl_resource *resource;
>> + struct wl_resource *seat_resource;
>>
>> resource = wl_client_add_object(client, &input_method_interface,
>> &input_method_implementation,
>> id, input_method);
>>
>> - if (input_method->input_method_binding == NULL) {
>> - resource->destroy = unbind_input_method;
>> - input_method->input_method_binding = resource;
>> + if (input_method->input_method_binding != NULL) {
>> + wl_resource_post_error(resource,
>> + WL_DISPLAY_ERROR_INVALID_OBJECT,
>> + "interface object already bound");
>> + wl_resource_destroy(resource);
>> return;
>> }
>>
>> - wl_resource_post_error(resource, WL_DISPLAY_ERROR_INVALID_OBJECT,
>> - "interface object already bound");
>> - wl_resource_destroy(resource);
>> + resource->destroy = unbind_input_method;
>> + input_method->input_method_binding = resource;
>> +
>> + seat_resource = wl_client_get_object_for_interface(client,
>> + &wl_seat_interface,
>> + input_method->seat);
>> + assert(seat_resource);
>> + input_method_send_assigned_seat(resource, seat_resource);
>> }
>>
>> static void
>> @@ -325,6 +335,7 @@ input_method_create(struct weston_compositor *ec,
>> input_method = calloc(1, sizeof *input_method);
>>
>> input_method->ec = ec;
>> + input_method->seat = seat;
>> input_method->model = NULL;
>> input_method->focus_listener_initialized = 0;
>>
>>
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list