mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-11-23 14:59:47 +03:00
Make struct browser_mouse a part of gui_window instead of a malloced pointer. It was never used separately or outside gtk_window.c or freed.
svn path=/trunk/netsurf/; revision=10271
This commit is contained in:
parent
14008b11d0
commit
4746cb7fe1
@ -44,7 +44,16 @@ struct gui_window {
|
||||
* drawing area, etc that may contain 1 -> several gui_windows */
|
||||
struct browser_window *bw;
|
||||
/**< the 'content' window that is rendered in the gui_window*/
|
||||
struct browser_mouse *mouse; /**< contains mouse state / events */
|
||||
|
||||
struct {
|
||||
struct gui_window *gui;
|
||||
struct box *box;
|
||||
|
||||
gdouble pressed_x;
|
||||
gdouble pressed_y;
|
||||
gboolean waiting;
|
||||
browser_mouse_state state;
|
||||
} mouse; /**< contains mouse state / events */
|
||||
|
||||
int caretx, carety, careth;
|
||||
/**< storage caret dimension / location for rendering */
|
||||
@ -154,12 +163,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
|
||||
LOG(("Creating gui window %p for browser window %p", g, bw));
|
||||
|
||||
g->bw = bw;
|
||||
g->mouse = malloc(sizeof(*g->mouse));
|
||||
if (!g->mouse) {
|
||||
warn_user("NoMemory", 0);
|
||||
return 0;
|
||||
}
|
||||
g->mouse->state = 0;
|
||||
g->mouse.state = 0;
|
||||
g->current_pointer = GUI_POINTER_DEFAULT;
|
||||
if (clone != NULL)
|
||||
bw->scale = clone->scale;
|
||||
@ -226,10 +230,9 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
|
||||
|
||||
gtk_container_set_border_width(GTK_CONTAINER(g->viewport), 0);
|
||||
gtk_viewport_set_shadow_type(g->viewport, GTK_SHADOW_NONE);
|
||||
if (g->scrolledwindow)
|
||||
gtk_widget_show(GTK_WIDGET(g->scrolledwindow));
|
||||
/* And enable visibility from our viewport down */
|
||||
gtk_widget_show_all(GTK_WIDGET(g->viewport));
|
||||
gtk_widget_show(GTK_WIDGET(g->scrolledwindow));
|
||||
/* And enable visibility from our viewport down */
|
||||
gtk_widget_show_all(GTK_WIDGET(g->viewport));
|
||||
|
||||
switch(bw->scrolling) {
|
||||
case SCROLLING_NO:
|
||||
@ -412,31 +415,31 @@ gboolean nsgtk_window_motion_notify_event(GtkWidget *widget,
|
||||
if ((abs(event->x - g->last_x) < 5) && (abs(event->y - g->last_y) < 5))
|
||||
/* necessary for touch screens */
|
||||
return FALSE;
|
||||
if (g->mouse->state & BROWSER_MOUSE_PRESS_1){
|
||||
if (g->mouse.state & BROWSER_MOUSE_PRESS_1){
|
||||
/* Start button 1 drag */
|
||||
browser_window_mouse_click(g->bw, BROWSER_MOUSE_DRAG_1,
|
||||
g->mouse->pressed_x, g->mouse->pressed_y);
|
||||
g->mouse.pressed_x, g->mouse.pressed_y);
|
||||
/* Replace PRESS with HOLDING and declare drag in progress */
|
||||
g->mouse->state ^= (BROWSER_MOUSE_PRESS_1 |
|
||||
g->mouse.state ^= (BROWSER_MOUSE_PRESS_1 |
|
||||
BROWSER_MOUSE_HOLDING_1);
|
||||
g->mouse->state |= BROWSER_MOUSE_DRAG_ON;
|
||||
g->mouse.state |= BROWSER_MOUSE_DRAG_ON;
|
||||
}
|
||||
else if (g->mouse->state & BROWSER_MOUSE_PRESS_2){
|
||||
else if (g->mouse.state & BROWSER_MOUSE_PRESS_2){
|
||||
/* Start button 2 drag */
|
||||
browser_window_mouse_click(g->bw, BROWSER_MOUSE_DRAG_2,
|
||||
g->mouse->pressed_x, g->mouse->pressed_y);
|
||||
g->mouse.pressed_x, g->mouse.pressed_y);
|
||||
/* Replace PRESS with HOLDING and declare drag in progress */
|
||||
g->mouse->state ^= (BROWSER_MOUSE_PRESS_2 |
|
||||
g->mouse.state ^= (BROWSER_MOUSE_PRESS_2 |
|
||||
BROWSER_MOUSE_HOLDING_2);
|
||||
g->mouse->state |= BROWSER_MOUSE_DRAG_ON;
|
||||
g->mouse.state |= BROWSER_MOUSE_DRAG_ON;
|
||||
}
|
||||
/* Handle modifiers being removed */
|
||||
if (g->mouse->state & BROWSER_MOUSE_MOD_1 && !shift)
|
||||
g->mouse->state ^= BROWSER_MOUSE_MOD_1;
|
||||
if (g->mouse->state & BROWSER_MOUSE_MOD_2 && !ctrl)
|
||||
g->mouse->state ^= BROWSER_MOUSE_MOD_2;
|
||||
if (g->mouse.state & BROWSER_MOUSE_MOD_1 && !shift)
|
||||
g->mouse.state ^= BROWSER_MOUSE_MOD_1;
|
||||
if (g->mouse.state & BROWSER_MOUSE_MOD_2 && !ctrl)
|
||||
g->mouse.state ^= BROWSER_MOUSE_MOD_2;
|
||||
|
||||
browser_window_mouse_track(g->bw, g->mouse->state,
|
||||
browser_window_mouse_track(g->bw, g->mouse.state,
|
||||
event->x / g->bw->scale, event->y / g->bw->scale);
|
||||
|
||||
g->last_x = event->x;
|
||||
@ -454,38 +457,38 @@ gboolean nsgtk_window_button_press_event(GtkWidget *widget,
|
||||
gtk_widget_hide(GTK_WIDGET(nsgtk_scaffolding_history_window(
|
||||
g->scaffold)->window));
|
||||
|
||||
g->mouse->pressed_x = event->x / g->bw->scale;
|
||||
g->mouse->pressed_y = event->y / g->bw->scale;
|
||||
g->mouse.pressed_x = event->x / g->bw->scale;
|
||||
g->mouse.pressed_y = event->y / g->bw->scale;
|
||||
|
||||
switch (event->button) {
|
||||
case 1:
|
||||
/* Left button, usually.
|
||||
* Pass to core as BUTTON 1. */
|
||||
g->mouse->state = BROWSER_MOUSE_PRESS_1;
|
||||
g->mouse.state = BROWSER_MOUSE_PRESS_1;
|
||||
break;
|
||||
case 2:
|
||||
/* Middle button, usually.
|
||||
* Pass to core as BUTTON 2 */
|
||||
g->mouse->state = BROWSER_MOUSE_PRESS_2;
|
||||
g->mouse.state = BROWSER_MOUSE_PRESS_2;
|
||||
break;
|
||||
case 3:
|
||||
/* Right button, usually.
|
||||
* Front end action button -- context menu. */
|
||||
browser_window_remove_caret(g->bw);
|
||||
nsgtk_scaffolding_popup_menu(g->scaffold, g->mouse->pressed_x,
|
||||
g->mouse->pressed_y);
|
||||
nsgtk_scaffolding_popup_menu(g->scaffold, g->mouse.pressed_x,
|
||||
g->mouse.pressed_y);
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
/* Handle the modifiers too */
|
||||
if (event->state & GDK_SHIFT_MASK)
|
||||
g->mouse->state |= BROWSER_MOUSE_MOD_1;
|
||||
g->mouse.state |= BROWSER_MOUSE_MOD_1;
|
||||
if (event->state & GDK_CONTROL_MASK)
|
||||
g->mouse->state |= BROWSER_MOUSE_MOD_2;
|
||||
g->mouse.state |= BROWSER_MOUSE_MOD_2;
|
||||
|
||||
browser_window_mouse_click(g->bw, g->mouse->state, g->mouse->pressed_x,
|
||||
g->mouse->pressed_y);
|
||||
browser_window_mouse_click(g->bw, g->mouse.state, g->mouse.pressed_x,
|
||||
g->mouse.pressed_y);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -499,25 +502,25 @@ gboolean nsgtk_window_button_release_event(GtkWidget *widget,
|
||||
|
||||
/* If the mouse state is PRESS then we are waiting for a release to emit
|
||||
* a click event, otherwise just reset the state to nothing*/
|
||||
if (g->mouse->state & BROWSER_MOUSE_PRESS_1)
|
||||
g->mouse->state ^= (BROWSER_MOUSE_PRESS_1 | BROWSER_MOUSE_CLICK_1);
|
||||
else if (g->mouse->state & BROWSER_MOUSE_PRESS_2)
|
||||
g->mouse->state ^= (BROWSER_MOUSE_PRESS_2 | BROWSER_MOUSE_CLICK_2);
|
||||
if (g->mouse.state & BROWSER_MOUSE_PRESS_1)
|
||||
g->mouse.state ^= (BROWSER_MOUSE_PRESS_1 | BROWSER_MOUSE_CLICK_1);
|
||||
else if (g->mouse.state & BROWSER_MOUSE_PRESS_2)
|
||||
g->mouse.state ^= (BROWSER_MOUSE_PRESS_2 | BROWSER_MOUSE_CLICK_2);
|
||||
|
||||
/* Handle modifiers being removed */
|
||||
if (g->mouse->state & BROWSER_MOUSE_MOD_1 && !shift)
|
||||
g->mouse->state ^= BROWSER_MOUSE_MOD_1;
|
||||
if (g->mouse->state & BROWSER_MOUSE_MOD_2 && !ctrl)
|
||||
g->mouse->state ^= BROWSER_MOUSE_MOD_2;
|
||||
if (g->mouse.state & BROWSER_MOUSE_MOD_1 && !shift)
|
||||
g->mouse.state ^= BROWSER_MOUSE_MOD_1;
|
||||
if (g->mouse.state & BROWSER_MOUSE_MOD_2 && !ctrl)
|
||||
g->mouse.state ^= BROWSER_MOUSE_MOD_2;
|
||||
|
||||
if (g->mouse->state & (BROWSER_MOUSE_CLICK_1|BROWSER_MOUSE_CLICK_2))
|
||||
browser_window_mouse_click(g->bw, g->mouse->state, event->x / g->bw->scale,
|
||||
if (g->mouse.state & (BROWSER_MOUSE_CLICK_1|BROWSER_MOUSE_CLICK_2))
|
||||
browser_window_mouse_click(g->bw, g->mouse.state, event->x / g->bw->scale,
|
||||
event->y / g->bw->scale);
|
||||
else
|
||||
browser_window_mouse_drag_end(g->bw, 0, event->x / g->bw->scale,
|
||||
event->y / g->bw->scale);
|
||||
|
||||
g->mouse->state = 0;
|
||||
g->mouse.state = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -23,15 +23,6 @@
|
||||
#include "desktop/browser.h"
|
||||
#include "gtk/gtk_scaffolding.h"
|
||||
|
||||
struct browser_mouse {
|
||||
struct gui_window *gui;
|
||||
struct box *box;
|
||||
|
||||
gdouble pressed_x;
|
||||
gdouble pressed_y;
|
||||
gboolean waiting;
|
||||
browser_mouse_state state;
|
||||
};
|
||||
|
||||
typedef enum nsgtk_window_signals {
|
||||
NSGTK_WINDOW_SIGNAL_CLICK,
|
||||
|
Loading…
Reference in New Issue
Block a user