Compare commits
	
		
			No commits in common. "d3b34cd482a38a72987ad5136073099acca36537" and "876fda4f55cf583813041df7471ceb3ae2e0e23e" have entirely different histories.
		
	
	
		
			d3b34cd482
			...
			876fda4f55
		
	
		
							
								
								
									
										115
									
								
								fiv-browser.c
									
									
									
									
									
								
							
							
						
						
									
										115
									
								
								fiv-browser.c
									
									
									
									
									
								
							| @ -156,7 +156,7 @@ relayout(FivBrowser *self, int width) | |||||||
| 
 | 
 | ||||||
| 	GtkBorder padding = {}; | 	GtkBorder padding = {}; | ||||||
| 	gtk_style_context_get_padding(style, GTK_STATE_FLAG_NORMAL, &padding); | 	gtk_style_context_get_padding(style, GTK_STATE_FLAG_NORMAL, &padding); | ||||||
| 	int available_width = width - padding.left - padding.right, max_width = 0; | 	int available_width = width - padding.left - padding.right; | ||||||
| 
 | 
 | ||||||
| 	g_array_set_size(self->layouted_rows, 0); | 	g_array_set_size(self->layouted_rows, 0); | ||||||
| 	// Whatever self->drag_begin_* used to point at might no longer be there,
 | 	// Whatever self->drag_begin_* used to point at might no longer be there,
 | ||||||
| @ -183,10 +183,7 @@ relayout(FivBrowser *self, int width) | |||||||
| 
 | 
 | ||||||
| 		g_array_append_val(items, | 		g_array_append_val(items, | ||||||
| 			((Item) {.entry = entry, .x_offset = x + self->item_border_x})); | 			((Item) {.entry = entry, .x_offset = x + self->item_border_x})); | ||||||
| 
 |  | ||||||
| 		x += width; | 		x += width; | ||||||
| 		if (max_width < width) |  | ||||||
| 			max_width = width; |  | ||||||
| 	} | 	} | ||||||
| 	if (items->len) { | 	if (items->len) { | ||||||
| 		append_row(self, &y, | 		append_row(self, &y, | ||||||
| @ -196,9 +193,11 @@ relayout(FivBrowser *self, int width) | |||||||
| 	g_array_free(items, TRUE); | 	g_array_free(items, TRUE); | ||||||
| 	int total_height = y + padding.bottom; | 	int total_height = y + padding.bottom; | ||||||
| 	if (self->hadjustment) { | 	if (self->hadjustment) { | ||||||
|  | 		gint minimum_width = 0; | ||||||
|  | 		gtk_widget_get_preferred_width(widget, &minimum_width, NULL); | ||||||
|  | 
 | ||||||
| 		gtk_adjustment_set_lower(self->hadjustment, 0); | 		gtk_adjustment_set_lower(self->hadjustment, 0); | ||||||
| 		gtk_adjustment_set_upper(self->hadjustment, | 		gtk_adjustment_set_upper(self->hadjustment, MAX(width, minimum_width)); | ||||||
| 			width + MAX(0, max_width - available_width)); |  | ||||||
| 		gtk_adjustment_set_step_increment(self->hadjustment, width * 0.1); | 		gtk_adjustment_set_step_increment(self->hadjustment, width * 0.1); | ||||||
| 		gtk_adjustment_set_page_increment(self->hadjustment, width * 0.9); | 		gtk_adjustment_set_page_increment(self->hadjustment, width * 0.9); | ||||||
| 		gtk_adjustment_set_page_size(self->hadjustment, width); | 		gtk_adjustment_set_page_size(self->hadjustment, width); | ||||||
| @ -917,12 +916,9 @@ fiv_browser_get_preferred_width(GtkWidget *widget, gint *minimum, gint *natural) | |||||||
| 
 | 
 | ||||||
| 	GtkBorder padding = {}; | 	GtkBorder padding = {}; | ||||||
| 	gtk_style_context_get_padding(style, GTK_STATE_FLAG_NORMAL, &padding); | 	gtk_style_context_get_padding(style, GTK_STATE_FLAG_NORMAL, &padding); | ||||||
| 
 | 	*minimum = *natural = | ||||||
| 	// This should ideally reflect thumbnails, but we're in a GtkScrolledWindow,
 | 		FIV_THUMBNAIL_WIDE_COEFFICIENT * self->item_height + padding.left + | ||||||
| 	// making this rather inconsequential.
 | 		2 * self->item_border_x + padding.right; | ||||||
| 	int fluff = padding.left + 2 * self->item_border_x + padding.right; |  | ||||||
| 	*minimum = fluff + self->item_height /* Icons are rectangular. */; |  | ||||||
| 	*natural = fluff + FIV_THUMBNAIL_WIDE_COEFFICIENT * self->item_height; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | static void | ||||||
| @ -993,16 +989,14 @@ fiv_browser_size_allocate(GtkWidget *widget, GtkAllocation *allocation) | |||||||
| 	GTK_WIDGET_CLASS(fiv_browser_parent_class) | 	GTK_WIDGET_CLASS(fiv_browser_parent_class) | ||||||
| 		->size_allocate(widget, allocation); | 		->size_allocate(widget, allocation); | ||||||
| 
 | 
 | ||||||
| 	relayout(FIV_BROWSER(widget), allocation->width); | 	int height = relayout(FIV_BROWSER(widget), allocation->width); | ||||||
| 
 | 
 | ||||||
| 	// Avoid fresh blank space.
 | 	// Avoid fresh blank space.
 | ||||||
| 	if (self->hadjustment) { |  | ||||||
| 		gtk_adjustment_set_value( |  | ||||||
| 			self->hadjustment, gtk_adjustment_get_value(self->hadjustment)); |  | ||||||
| 	} |  | ||||||
| 	if (self->vadjustment) { | 	if (self->vadjustment) { | ||||||
| 		gtk_adjustment_set_value( | 		double y1 = gtk_adjustment_get_value(self->vadjustment); | ||||||
| 			self->vadjustment, gtk_adjustment_get_value(self->vadjustment)); | 		double ph = gtk_adjustment_get_page_size(self->vadjustment); | ||||||
|  | 		if (y1 + ph > height) | ||||||
|  | 			gtk_adjustment_set_value(self->vadjustment, height - ph); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1069,17 +1063,16 @@ static gboolean | |||||||
| fiv_browser_button_press_event(GtkWidget *widget, GdkEventButton *event) | fiv_browser_button_press_event(GtkWidget *widget, GdkEventButton *event) | ||||||
| { | { | ||||||
| 	FivBrowser *self = FIV_BROWSER(widget); | 	FivBrowser *self = FIV_BROWSER(widget); | ||||||
| 	if (GTK_WIDGET_CLASS(fiv_browser_parent_class) | 	GTK_WIDGET_CLASS(fiv_browser_parent_class) | ||||||
| 		->button_press_event(widget, event)) | 		->button_press_event(widget, event); | ||||||
| 		return GDK_EVENT_STOP; |  | ||||||
| 
 | 
 | ||||||
| 	// Make pressing multiple mouse buttons at once cancel a click.
 | 	// Make pressing multiple mouse buttons at once cancel a click.
 | ||||||
| 	if (self->tracked_button) { | 	if (self->tracked_button) { | ||||||
| 		abort_button_tracking(self); | 		abort_button_tracking(self); | ||||||
| 		return GDK_EVENT_STOP; | 		return TRUE; | ||||||
| 	} | 	} | ||||||
| 	if (event->type != GDK_BUTTON_PRESS) | 	if (event->type != GDK_BUTTON_PRESS) | ||||||
| 		return GDK_EVENT_PROPAGATE; | 		return FALSE; | ||||||
| 
 | 
 | ||||||
| 	guint state = event->state & gtk_accelerator_get_default_mod_mask(); | 	guint state = event->state & gtk_accelerator_get_default_mod_mask(); | ||||||
| 	if (event->button == GDK_BUTTON_PRIMARY && state == 0 && | 	if (event->button == GDK_BUTTON_PRIMARY && state == 0 && | ||||||
| @ -1091,13 +1084,13 @@ fiv_browser_button_press_event(GtkWidget *widget, GdkEventButton *event) | |||||||
| 		if (event->button == GDK_BUTTON_SECONDARY) | 		if (event->button == GDK_BUTTON_SECONDARY) | ||||||
| 			show_context_menu(widget, fiv_io_model_get_location(self->model)); | 			show_context_menu(widget, fiv_io_model_get_location(self->model)); | ||||||
| 		else if (event->button != GDK_BUTTON_PRIMARY) | 		else if (event->button != GDK_BUTTON_PRIMARY) | ||||||
| 			return GDK_EVENT_PROPAGATE; | 			return FALSE; | ||||||
| 
 | 
 | ||||||
| 		if (self->selected) { | 		if (self->selected) { | ||||||
| 			self->selected = NULL; | 			self->selected = NULL; | ||||||
| 			gtk_widget_queue_draw(widget); | 			gtk_widget_queue_draw(widget); | ||||||
| 		} | 		} | ||||||
| 		return GDK_EVENT_STOP; | 		return TRUE; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// In accordance with Nautilus, Thunar, and the mildly confusing
 | 	// In accordance with Nautilus, Thunar, and the mildly confusing
 | ||||||
| @ -1114,7 +1107,7 @@ fiv_browser_button_press_event(GtkWidget *widget, GdkEventButton *event) | |||||||
| 		GFile *file = g_file_new_for_uri(entry->uri); | 		GFile *file = g_file_new_for_uri(entry->uri); | ||||||
| 		show_context_menu(widget, file); | 		show_context_menu(widget, file); | ||||||
| 		g_object_unref(file); | 		g_object_unref(file); | ||||||
| 		return GDK_EVENT_STOP; | 		return TRUE; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// gtk_drag_source_set() would span the whole widget area, we'd have to
 | 	// gtk_drag_source_set() would span the whole widget area, we'd have to
 | ||||||
| @ -1125,26 +1118,25 @@ fiv_browser_button_press_event(GtkWidget *widget, GdkEventButton *event) | |||||||
| 		self->tracked_button = event->button; | 		self->tracked_button = event->button; | ||||||
| 		self->drag_begin_x = event->x; | 		self->drag_begin_x = event->x; | ||||||
| 		self->drag_begin_y = event->y; | 		self->drag_begin_y = event->y; | ||||||
| 		return GDK_EVENT_STOP; | 		return TRUE; | ||||||
| 	} | 	} | ||||||
| 	return GDK_EVENT_PROPAGATE; | 	return FALSE; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static gboolean | static gboolean | ||||||
| fiv_browser_button_release_event(GtkWidget *widget, GdkEventButton *event) | fiv_browser_button_release_event(GtkWidget *widget, GdkEventButton *event) | ||||||
| { | { | ||||||
| 	FivBrowser *self = FIV_BROWSER(widget); | 	FivBrowser *self = FIV_BROWSER(widget); | ||||||
| 	if (GTK_WIDGET_CLASS(fiv_browser_parent_class) | 	GTK_WIDGET_CLASS(fiv_browser_parent_class) | ||||||
| 		->button_release_event(widget, event)) | 		->button_release_event(widget, event); | ||||||
| 		return GDK_EVENT_STOP; |  | ||||||
| 	if (event->button != self->tracked_button) | 	if (event->button != self->tracked_button) | ||||||
| 		return GDK_EVENT_PROPAGATE; | 		return FALSE; | ||||||
| 
 | 
 | ||||||
| 	// Middle clicks should only work on the starting entry.
 | 	// Middle clicks should only work on the starting entry.
 | ||||||
| 	const Entry *entry = entry_at(self, self->drag_begin_x, self->drag_begin_y); | 	const Entry *entry = entry_at(self, self->drag_begin_x, self->drag_begin_y); | ||||||
| 	abort_button_tracking(self); | 	abort_button_tracking(self); | ||||||
| 	if (!entry || entry != entry_at(self, event->x, event->y)) | 	if (!entry || entry != entry_at(self, event->x, event->y)) | ||||||
| 		return GDK_EVENT_PROPAGATE; | 		return FALSE; | ||||||
| 
 | 
 | ||||||
| 	guint state = event->state & gtk_accelerator_get_default_mod_mask(); | 	guint state = event->state & gtk_accelerator_get_default_mod_mask(); | ||||||
| 	if ((event->button == GDK_BUTTON_PRIMARY && state == 0)) | 	if ((event->button == GDK_BUTTON_PRIMARY && state == 0)) | ||||||
| @ -1152,33 +1144,24 @@ fiv_browser_button_release_event(GtkWidget *widget, GdkEventButton *event) | |||||||
| 	if ((event->button == GDK_BUTTON_PRIMARY && state == GDK_CONTROL_MASK) || | 	if ((event->button == GDK_BUTTON_PRIMARY && state == GDK_CONTROL_MASK) || | ||||||
| 		(event->button == GDK_BUTTON_MIDDLE && state == 0)) | 		(event->button == GDK_BUTTON_MIDDLE && state == 0)) | ||||||
| 		return open_entry(widget, entry, TRUE); | 		return open_entry(widget, entry, TRUE); | ||||||
| 	return GDK_EVENT_PROPAGATE; | 	return FALSE; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static gboolean | static gboolean | ||||||
| fiv_browser_motion_notify_event(GtkWidget *widget, GdkEventMotion *event) | fiv_browser_motion_notify_event(GtkWidget *widget, GdkEventMotion *event) | ||||||
| { | { | ||||||
| 	FivBrowser *self = FIV_BROWSER(widget); | 	FivBrowser *self = FIV_BROWSER(widget); | ||||||
| 	if (GTK_WIDGET_CLASS(fiv_browser_parent_class) | 	GTK_WIDGET_CLASS(fiv_browser_parent_class) | ||||||
| 		->motion_notify_event(widget, event)) | 		->motion_notify_event(widget, event); | ||||||
| 		return GDK_EVENT_STOP; |  | ||||||
| 
 | 
 | ||||||
| 	// Touch screen dragging is how you scroll the parent GtkScrolledWindow,
 |  | ||||||
| 	// don't steal that gesture.
 |  | ||||||
| 	//
 |  | ||||||
| 	// While we could allow dragging items that have been selected,
 |  | ||||||
| 	// it's currently impossible to select on touch screens without opening,
 |  | ||||||
| 	// and this behaviour/distinction seems unintuitive/surprising.
 |  | ||||||
| 	guint state = event->state & gtk_accelerator_get_default_mod_mask(); | 	guint state = event->state & gtk_accelerator_get_default_mod_mask(); | ||||||
| 	if (state != 0 || self->tracked_button != GDK_BUTTON_PRIMARY || | 	if (state != 0 || self->tracked_button != GDK_BUTTON_PRIMARY || | ||||||
| 		!gtk_drag_check_threshold(widget, self->drag_begin_x, | 		!gtk_drag_check_threshold(widget, self->drag_begin_x, | ||||||
| 			self->drag_begin_y, event->x, event->y) || | 			self->drag_begin_y, event->x, event->y)) { | ||||||
| 		gdk_device_get_source(gdk_event_get_source_device( |  | ||||||
| 			(GdkEvent *) event)) == GDK_SOURCE_TOUCHSCREEN) { |  | ||||||
| 		const Entry *entry = entry_at(self, event->x, event->y); | 		const Entry *entry = entry_at(self, event->x, event->y); | ||||||
| 		GdkWindow *window = gtk_widget_get_window(widget); | 		GdkWindow *window = gtk_widget_get_window(widget); | ||||||
| 		gdk_window_set_cursor(window, entry ? self->pointer : NULL); | 		gdk_window_set_cursor(window, entry ? self->pointer : NULL); | ||||||
| 		return GDK_EVENT_PROPAGATE; | 		return FALSE; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// The "correct" behaviour is to set the selection on a left mouse button
 | 	// The "correct" behaviour is to set the selection on a left mouse button
 | ||||||
| @ -1186,7 +1169,7 @@ fiv_browser_motion_notify_event(GtkWidget *widget, GdkEventMotion *event) | |||||||
| 	const Entry *entry = entry_at(self, self->drag_begin_x, self->drag_begin_y); | 	const Entry *entry = entry_at(self, self->drag_begin_x, self->drag_begin_y); | ||||||
| 	abort_button_tracking(self); | 	abort_button_tracking(self); | ||||||
| 	if (!entry) | 	if (!entry) | ||||||
| 		return GDK_EVENT_STOP; | 		return TRUE; | ||||||
| 
 | 
 | ||||||
| 	self->selected = entry; | 	self->selected = entry; | ||||||
| 	gtk_widget_queue_draw(widget); | 	gtk_widget_queue_draw(widget); | ||||||
| @ -1198,7 +1181,7 @@ fiv_browser_motion_notify_event(GtkWidget *widget, GdkEventMotion *event) | |||||||
| 	gtk_drag_begin_with_coordinates(widget, target_list, actions, | 	gtk_drag_begin_with_coordinates(widget, target_list, actions, | ||||||
| 		self->tracked_button, (GdkEvent *) event, event->x, event->y); | 		self->tracked_button, (GdkEvent *) event, event->x, event->y); | ||||||
| 	gtk_target_list_unref(target_list); | 	gtk_target_list_unref(target_list); | ||||||
| 	return GDK_EVENT_STOP; | 	return TRUE; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static gboolean | static gboolean | ||||||
| @ -1208,16 +1191,16 @@ fiv_browser_scroll_event(GtkWidget *widget, GdkEventScroll *event) | |||||||
| 	abort_button_tracking(self); | 	abort_button_tracking(self); | ||||||
| 	if ((event->state & gtk_accelerator_get_default_mod_mask()) != | 	if ((event->state & gtk_accelerator_get_default_mod_mask()) != | ||||||
| 		GDK_CONTROL_MASK) | 		GDK_CONTROL_MASK) | ||||||
| 		return GDK_EVENT_PROPAGATE; | 		return FALSE; | ||||||
| 
 | 
 | ||||||
| 	static double delta = 0; | 	static double delta = 0; | ||||||
| 	switch (event->direction) { | 	switch (event->direction) { | ||||||
| 	case GDK_SCROLL_UP: | 	case GDK_SCROLL_UP: | ||||||
| 		set_item_size(self, self->item_size + 1); | 		set_item_size(self, self->item_size + 1); | ||||||
| 		return GDK_EVENT_STOP; | 		return TRUE; | ||||||
| 	case GDK_SCROLL_DOWN: | 	case GDK_SCROLL_DOWN: | ||||||
| 		set_item_size(self, self->item_size - 1); | 		set_item_size(self, self->item_size - 1); | ||||||
| 		return GDK_EVENT_STOP; | 		return TRUE; | ||||||
| 	case GDK_SCROLL_SMOOTH: | 	case GDK_SCROLL_SMOOTH: | ||||||
| 		// On GDK/Wayland, the mouse wheel will typically create 1.5 deltas,
 | 		// On GDK/Wayland, the mouse wheel will typically create 1.5 deltas,
 | ||||||
| 		// after dividing a 15 degree click angle from libinput by 10.
 | 		// after dividing a 15 degree click angle from libinput by 10.
 | ||||||
| @ -1227,13 +1210,13 @@ fiv_browser_scroll_event(GtkWidget *widget, GdkEventScroll *event) | |||||||
| 		else if (delta >= +1) | 		else if (delta >= +1) | ||||||
| 			set_item_size(self, self->item_size - 1); | 			set_item_size(self, self->item_size - 1); | ||||||
| 		else if (!event->is_stop) | 		else if (!event->is_stop) | ||||||
| 			return GDK_EVENT_STOP; | 			return TRUE; | ||||||
| 
 | 
 | ||||||
| 		delta = 0; | 		delta = 0; | ||||||
| 		return GDK_EVENT_STOP; | 		return TRUE; | ||||||
| 	default: | 	default: | ||||||
| 		// Left/right are good to steal from GtkScrolledWindow for consistency.
 | 		// Left/right are good to steal from GtkScrolledWindow for consistency.
 | ||||||
| 		return GDK_EVENT_STOP; | 		return TRUE; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1405,25 +1388,25 @@ fiv_browser_key_press_event(GtkWidget *widget, GdkEventKey *event) | |||||||
| 		case GDK_KEY_Return: | 		case GDK_KEY_Return: | ||||||
| 			if (self->selected) | 			if (self->selected) | ||||||
| 				return open_entry(widget, self->selected, FALSE); | 				return open_entry(widget, self->selected, FALSE); | ||||||
| 			return GDK_EVENT_STOP; | 			return TRUE; | ||||||
| 		case GDK_KEY_Left: | 		case GDK_KEY_Left: | ||||||
| 			move_selection(self, GTK_DIR_LEFT); | 			move_selection(self, GTK_DIR_LEFT); | ||||||
| 			return GDK_EVENT_STOP; | 			return TRUE; | ||||||
| 		case GDK_KEY_Right: | 		case GDK_KEY_Right: | ||||||
| 			move_selection(self, GTK_DIR_RIGHT); | 			move_selection(self, GTK_DIR_RIGHT); | ||||||
| 			return GDK_EVENT_STOP; | 			return TRUE; | ||||||
| 		case GDK_KEY_Up: | 		case GDK_KEY_Up: | ||||||
| 			move_selection(self, GTK_DIR_UP); | 			move_selection(self, GTK_DIR_UP); | ||||||
| 			return GDK_EVENT_STOP; | 			return TRUE; | ||||||
| 		case GDK_KEY_Down: | 		case GDK_KEY_Down: | ||||||
| 			move_selection(self, GTK_DIR_DOWN); | 			move_selection(self, GTK_DIR_DOWN); | ||||||
| 			return GDK_EVENT_STOP; | 			return TRUE; | ||||||
| 		case GDK_KEY_Home: | 		case GDK_KEY_Home: | ||||||
| 			move_selection_home(self); | 			move_selection_home(self); | ||||||
| 			return GDK_EVENT_STOP; | 			return TRUE; | ||||||
| 		case GDK_KEY_End: | 		case GDK_KEY_End: | ||||||
| 			move_selection_end(self); | 			move_selection_end(self); | ||||||
| 			return GDK_EVENT_STOP; | 			return TRUE; | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 	case GDK_CONTROL_MASK: | 	case GDK_CONTROL_MASK: | ||||||
| @ -1431,10 +1414,10 @@ fiv_browser_key_press_event(GtkWidget *widget, GdkEventKey *event) | |||||||
| 		switch (event->keyval) { | 		switch (event->keyval) { | ||||||
| 		case GDK_KEY_plus: | 		case GDK_KEY_plus: | ||||||
| 			set_item_size(self, self->item_size + 1); | 			set_item_size(self, self->item_size + 1); | ||||||
| 			return GDK_EVENT_STOP; | 			return TRUE; | ||||||
| 		case GDK_KEY_minus: | 		case GDK_KEY_minus: | ||||||
| 			set_item_size(self, self->item_size - 1); | 			set_item_size(self, self->item_size - 1); | ||||||
| 			return GDK_EVENT_STOP; | 			return TRUE; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -1511,8 +1494,6 @@ on_long_press(GtkGestureLongPress *lp, gdouble x, gdouble y, gpointer user_data) | |||||||
| 		return; | 		return; | ||||||
| #endif  // GDK_WINDOWING_X11
 | #endif  // GDK_WINDOWING_X11
 | ||||||
| 
 | 
 | ||||||
| 	// It might also be possible to have long-press just select items,
 |  | ||||||
| 	// and show some kind of toolbar with available actions.
 |  | ||||||
| 	GFile *file = g_file_new_for_uri(entry->uri); | 	GFile *file = g_file_new_for_uri(entry->uri); | ||||||
| 	gtk_menu_popup_at_rect(fiv_context_menu_new(widget, file), window, | 	gtk_menu_popup_at_rect(fiv_context_menu_new(widget, file), window, | ||||||
| 		&(GdkRectangle) {.x = x, .y = y}, GDK_GRAVITY_NORTH_WEST, | 		&(GdkRectangle) {.x = x, .y = y}, GDK_GRAVITY_NORTH_WEST, | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								fiv-view.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								fiv-view.c
									
									
									
									
									
								
							| @ -630,14 +630,13 @@ fiv_view_draw(GtkWidget *widget, cairo_t *cr) | |||||||
| static gboolean | static gboolean | ||||||
| fiv_view_button_press_event(GtkWidget *widget, GdkEventButton *event) | fiv_view_button_press_event(GtkWidget *widget, GdkEventButton *event) | ||||||
| { | { | ||||||
| 	if (GTK_WIDGET_CLASS(fiv_view_parent_class) | 	// XXX: Return value?
 | ||||||
| 			->button_press_event(widget, event)) | 	GTK_WIDGET_CLASS(fiv_view_parent_class)->button_press_event(widget, event); | ||||||
| 		return GDK_EVENT_STOP; |  | ||||||
| 
 | 
 | ||||||
| 	if (event->button == GDK_BUTTON_PRIMARY && | 	if (event->button == GDK_BUTTON_PRIMARY && | ||||||
| 		gtk_widget_get_focus_on_click(widget)) | 		gtk_widget_get_focus_on_click(widget)) | ||||||
| 		gtk_widget_grab_focus(widget); | 		gtk_widget_grab_focus(widget); | ||||||
| 	return GDK_EVENT_PROPAGATE; | 	return FALSE; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #define SCALE_STEP 1.25 | #define SCALE_STEP 1.25 | ||||||
| @ -738,9 +737,9 @@ fiv_view_scroll_event(GtkWidget *widget, GdkEventScroll *event) | |||||||
| { | { | ||||||
| 	FivView *self = FIV_VIEW(widget); | 	FivView *self = FIV_VIEW(widget); | ||||||
| 	if (!self->image) | 	if (!self->image) | ||||||
| 		return GDK_EVENT_PROPAGATE; | 		return FALSE; | ||||||
| 	if (event->state & gtk_accelerator_get_default_mod_mask()) | 	if (event->state & gtk_accelerator_get_default_mod_mask()) | ||||||
| 		return GDK_EVENT_PROPAGATE; | 		return FALSE; | ||||||
| 
 | 
 | ||||||
| 	switch (event->direction) { | 	switch (event->direction) { | ||||||
| 	case GDK_SCROLL_UP: | 	case GDK_SCROLL_UP: | ||||||
| @ -750,7 +749,7 @@ fiv_view_scroll_event(GtkWidget *widget, GdkEventScroll *event) | |||||||
| 	default: | 	default: | ||||||
| 		// For some reason, native GdkWindows may also get GDK_SCROLL_SMOOTH.
 | 		// For some reason, native GdkWindows may also get GDK_SCROLL_SMOOTH.
 | ||||||
| 		// Left/right are good to steal from GtkScrolledWindow for consistency.
 | 		// Left/right are good to steal from GtkScrolledWindow for consistency.
 | ||||||
| 		return GDK_EVENT_STOP; | 		return TRUE; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user