clients: Maximize window when double touch on title bar
Signed-off-by: Xiong Zhang <xiong.y.zhang@intel.com>
This commit is contained in:
parent
d1be3128d0
commit
382de46a2f
@ -370,6 +370,7 @@ struct window_frame {
|
|||||||
|
|
||||||
uint32_t last_time;
|
uint32_t last_time;
|
||||||
uint32_t did_double, double_click;
|
uint32_t did_double, double_click;
|
||||||
|
int32_t last_id, double_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct menu {
|
struct menu {
|
||||||
@ -2429,7 +2430,23 @@ frame_touch_down_handler(struct widget *widget, struct input *input,
|
|||||||
{
|
{
|
||||||
struct window_frame *frame = data;
|
struct window_frame *frame = data;
|
||||||
|
|
||||||
frame_touch_down(frame->frame, input, id, x, y);
|
frame->double_click = 0;
|
||||||
|
if (time - frame->last_time <= DOUBLE_CLICK_PERIOD &&
|
||||||
|
frame->last_id == id) {
|
||||||
|
frame->double_click = 1;
|
||||||
|
frame->did_double = 1;
|
||||||
|
frame->double_id = id;
|
||||||
|
} else
|
||||||
|
frame->did_double = 0;
|
||||||
|
|
||||||
|
frame->last_time = time;
|
||||||
|
frame->last_id = id;
|
||||||
|
|
||||||
|
if (frame->double_click)
|
||||||
|
frame_double_touch_down(frame->frame, input, id, x, y);
|
||||||
|
else
|
||||||
|
frame_touch_down(frame->frame, input, id, x, y);
|
||||||
|
|
||||||
frame_handle_status(frame, input, time, THEME_LOCATION_CLIENT_AREA);
|
frame_handle_status(frame, input, time, THEME_LOCATION_CLIENT_AREA);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2440,7 +2457,12 @@ frame_touch_up_handler(struct widget *widget,
|
|||||||
{
|
{
|
||||||
struct window_frame *frame = data;
|
struct window_frame *frame = data;
|
||||||
|
|
||||||
frame_touch_up(frame->frame, input, id);
|
if (frame->double_id == id && frame->did_double) {
|
||||||
|
frame->did_double = 0;
|
||||||
|
frame->double_id = 0;
|
||||||
|
frame_double_touch_up(frame->frame, input, id);
|
||||||
|
} else
|
||||||
|
frame_touch_up(frame->frame, input, id);
|
||||||
frame_handle_status(frame, input, time, THEME_LOCATION_CLIENT_AREA);
|
frame_handle_status(frame, input, time, THEME_LOCATION_CLIENT_AREA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,6 +217,13 @@ enum theme_location
|
|||||||
frame_double_click(struct frame *frame, void *pointer,
|
frame_double_click(struct frame *frame, void *pointer,
|
||||||
uint32_t button, enum frame_button_state state);
|
uint32_t button, enum frame_button_state state);
|
||||||
|
|
||||||
|
void
|
||||||
|
frame_double_touch_down(struct frame *frame, void *data, int32_t id,
|
||||||
|
int x, int y);
|
||||||
|
|
||||||
|
void
|
||||||
|
frame_double_touch_up(struct frame *frame, void *data, int32_t id);
|
||||||
|
|
||||||
void
|
void
|
||||||
frame_repaint(struct frame *frame, cairo_t *cr);
|
frame_repaint(struct frame *frame, cairo_t *cr);
|
||||||
|
|
||||||
|
@ -868,6 +868,55 @@ frame_double_click(struct frame *frame, void *data,
|
|||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
frame_double_touch_down(struct frame *frame, void *data, int32_t id,
|
||||||
|
int x, int y)
|
||||||
|
{
|
||||||
|
struct frame_touch *touch = frame_touch_get(frame, data);
|
||||||
|
struct frame_button *button = frame_find_button(frame, x, y);
|
||||||
|
enum theme_location location;
|
||||||
|
|
||||||
|
if (touch && button) {
|
||||||
|
touch->button = button;
|
||||||
|
frame_button_press(touch->button);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
location = theme_get_location(frame->theme, x, y,
|
||||||
|
frame->width, frame->height,
|
||||||
|
frame->flags & FRAME_FLAG_MAXIMIZED ?
|
||||||
|
THEME_FRAME_MAXIMIZED : 0);
|
||||||
|
|
||||||
|
switch (location) {
|
||||||
|
case THEME_LOCATION_TITLEBAR:
|
||||||
|
frame->status |= FRAME_STATUS_MAXIMIZE;
|
||||||
|
break;
|
||||||
|
case THEME_LOCATION_RESIZING_TOP:
|
||||||
|
case THEME_LOCATION_RESIZING_BOTTOM:
|
||||||
|
case THEME_LOCATION_RESIZING_LEFT:
|
||||||
|
case THEME_LOCATION_RESIZING_RIGHT:
|
||||||
|
case THEME_LOCATION_RESIZING_TOP_LEFT:
|
||||||
|
case THEME_LOCATION_RESIZING_TOP_RIGHT:
|
||||||
|
case THEME_LOCATION_RESIZING_BOTTOM_LEFT:
|
||||||
|
case THEME_LOCATION_RESIZING_BOTTOM_RIGHT:
|
||||||
|
frame->status |= FRAME_STATUS_RESIZE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
frame_double_touch_up(struct frame *frame, void *data, int32_t id)
|
||||||
|
{
|
||||||
|
struct frame_touch *touch = frame_touch_get(frame, data);
|
||||||
|
|
||||||
|
if (touch && touch->button) {
|
||||||
|
frame_button_release(touch->button);
|
||||||
|
frame_touch_destroy(touch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
frame_repaint(struct frame *frame, cairo_t *cr)
|
frame_repaint(struct frame *frame, cairo_t *cr)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user