Fixed Tool Toggle Button problem (deselecting tools is not possible anymore, etc)

git-svn-id: https://xournal.svn.sourceforge.net/svnroot/xournal/trunk/xournalpp@151 9fe2bcd3-a095-4d8b-a836-9b85dc8d7627
presentation
andreasb123 15 years ago
parent d8bd69e7d6
commit 3b41a4f6a3
  1. 50
      src/control/Control.cpp
  2. 2
      src/control/Control.h
  3. 1
      src/gui/toolbarMenubar/AbstractItem.cpp
  4. 25
      src/gui/toolbarMenubar/AbstractToolItem.cpp
  5. 3
      src/gui/toolbarMenubar/AbstractToolItem.h
  6. 11
      src/gui/toolbarMenubar/ToolButton.cpp
  7. 2
      src/gui/toolbarMenubar/ToolButton.h
  8. 34
      src/gui/toolbarMenubar/ToolMenuHandler.cpp
  9. 2
      src/gui/toolbarMenubar/ToolSelectCombocontrol.cpp
  10. 23
      src/gui/toolbarMenubar/model/ToolbarData.cpp
  11. 1
      src/gui/toolbarMenubar/model/ToolbarData.h
  12. 55
      src/gui/toolbarMenubar/model/ToolbarModel.cpp
  13. 35
      src/gui/widgets/XournalWidget.cpp

@ -322,59 +322,9 @@ void Control::updatePageNumbers(int page, int pdfPage) {
fireEnableAction(ACTION_GOTO_NEXT_ANNOTATED_PAGE, current < count - 1);
}
/**
* If we change the state of a toggle button it will send an event,
* to prevent our application to get in an endless loop we need to catch this events
*/
bool Control::shouldIgnorAction(ActionType action, ActionGroup group, bool enabled) {
XOJ_CHECK_TYPE(Control);
// No selection events to catch
if (group == GROUP_NOGROUP) {
this->lastGroup = group;
return false;
}
// Different group, different action
if (this->lastGroup != group) {
this->lastAction = action;
this->lastGroup = group;
this->lastEnabled = enabled;
return false;
}
if (GROUP_TOGGLE_GROUP < group) {
if (this->lastEnabled == enabled) {
// same action
return true;
} else {
this->lastAction = action;
this->lastGroup = group;
this->lastEnabled = enabled;
return false;
}
}
this->lastAction = action;
this->lastGroup = group;
this->lastEnabled = enabled;
if (!enabled) {
return true;
}
return false;
}
// TODO LOW PRIO Deselect Tool should not be possibel
void Control::actionPerformed(ActionType type, ActionGroup group, GdkEvent *event, GtkMenuItem *menuitem, GtkToolButton *toolbutton, bool enabled) {
XOJ_CHECK_TYPE(Control);
// Because GTK sends events if we change radio items etc.
if (shouldIgnorAction(type, group, enabled)) {
return;
}
switch (type) {
// Menu File
case ACTION_NEW:

@ -198,8 +198,6 @@ protected:
void invokeLater(ActionType type);
void zoomFit();
bool shouldIgnorAction(ActionType type, ActionGroup group, bool enabled);
bool showSaveDialog();
void fileLoaded(int scrollToPage = -1);

@ -82,6 +82,7 @@ void AbstractItem::activated(GdkEvent * event, GtkMenuItem * menuitem, GtkToolBu
selected = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(toolbutton));
}
handler->actionPerformed(action, group, event, menuitem, toolbutton, selected);
}

@ -1,12 +1,15 @@
#include "AbstractToolItem.h"
AbstractToolItem::AbstractToolItem(String id, ActionHandler * handler, ActionType type, GtkWidget * menuitem) :
AbstractItem(id, handler, type, menuitem) {
AbstractItem(id, handler, type, menuitem) {
XOJ_INIT_TYPE(AbstractToolItem);
this->item = NULL;
this->popupMenu = NULL;
this->used = false;
this->toolToggleButtonActive = false;
this->toolToggleOnlyEnable = false;
}
AbstractToolItem::~AbstractToolItem() {
@ -31,7 +34,8 @@ void AbstractToolItem::selected(ActionGroup group, ActionType action) {
return;
}
if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(this->item)) != (this->action == action)) {
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(this->item), (this->action == action));
this->toolToggleButtonActive = (this->action == action);
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(this->item), this->toolToggleButtonActive);
}
}
}
@ -39,6 +43,23 @@ void AbstractToolItem::selected(ActionGroup group, ActionType action) {
void AbstractToolItem::toolButtonCallback(GtkToolButton * toolbutton, AbstractToolItem * item) {
XOJ_CHECK_TYPE_OBJ(item, AbstractToolItem);
if (toolbutton && GTK_IS_TOGGLE_TOOL_BUTTON(toolbutton)) {
bool selected = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(toolbutton));
// ignor this event... GTK Broadcast to much eventes, e.g. if you call set_active
if (item->toolToggleButtonActive == selected) {
return;
}
// don't allow disselect this button
if (item->toolToggleOnlyEnable && selected == false) {
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(toolbutton), true);
return;
}
item->toolToggleButtonActive = selected;
}
item->activated(NULL, NULL, toolbutton);
}

@ -45,6 +45,9 @@ protected:
GtkToolItem * item;
GtkWidget * popupMenu;
bool toolToggleButtonActive;
bool toolToggleOnlyEnable;
bool used;
};

@ -2,7 +2,7 @@
#include "../widgets/gtkmenutooltogglebutton.h"
ToolButton::ToolButton(ActionHandler * handler, String id, ActionType type, String stock, String description, GtkWidget * menuitem) :
AbstractToolItem(id, handler, type, menuitem) {
AbstractToolItem(id, handler, type, menuitem) {
XOJ_INIT_TYPE(ToolButton);
this->stock = stock;
@ -11,7 +11,7 @@ ToolButton::ToolButton(ActionHandler * handler, String id, ActionType type, Stri
}
ToolButton::ToolButton(ActionHandler * handler, GladeGui * gui, String id, ActionType type, String iconName, String description, GtkWidget * menuitem) :
AbstractToolItem(id, handler, type, menuitem) {
AbstractToolItem(id, handler, type, menuitem) {
XOJ_INIT_TYPE(ToolButton);
this->iconName = iconName;
@ -19,15 +19,16 @@ ToolButton::ToolButton(ActionHandler * handler, GladeGui * gui, String id, Actio
this->description = description;
}
ToolButton::ToolButton(ActionHandler * handler, GladeGui * gui, String id, ActionType type, ActionGroup group, String iconName, String description,
GtkWidget * menuitem) :
AbstractToolItem(id, handler, type, menuitem) {
ToolButton::ToolButton(ActionHandler * handler, GladeGui * gui, String id, ActionType type, ActionGroup group, bool toolToggleOnlyEnable, String iconName,
String description, GtkWidget * menuitem) :
AbstractToolItem(id, handler, type, menuitem) {
XOJ_INIT_TYPE(ToolButton);
this->iconName = iconName;
this->gui = gui;
this->description = description;
this->group = group;
this->toolToggleOnlyEnable = toolToggleOnlyEnable;
}
ToolButton::~ToolButton() {

@ -19,7 +19,7 @@ class ToolButton: public AbstractToolItem {
public:
ToolButton(ActionHandler * handler, String id, ActionType type, String stock, String description, GtkWidget * menuitem = NULL);
ToolButton(ActionHandler * handler, GladeGui * gui, String id, ActionType type, String iconName, String description, GtkWidget * menuitem = NULL);
ToolButton(ActionHandler * handler, GladeGui * gui, String id, ActionType type, ActionGroup group, String iconName, String description,
ToolButton(ActionHandler * handler, GladeGui * gui, String id, ActionType type, ActionGroup group, bool toolToggleOnlyEnable, String iconName, String description,
GtkWidget * menuitem = NULL);
virtual ~ToolButton();

@ -255,7 +255,7 @@ void ToolMenuHandler::initEraserToolItem() {
XOJ_CHECK_TYPE(ToolMenuHandler);
ToolButton * tbEraser =
new ToolButton(listener, gui, "ERASER", ACTION_TOOL_ERASER, GROUP_TOOL, "tool_eraser.png", _("Eraser"), gui->get("menuToolsEraser"));
new ToolButton(listener, gui, "ERASER", ACTION_TOOL_ERASER, GROUP_TOOL, true, "tool_eraser.png", _("Eraser"), gui->get("menuToolsEraser"));
GtkWidget * eraserPopup = gtk_menu_new();
GtkWidget *eraserPopupStandard = gtk_check_menu_item_new_with_label(_("standard"));
@ -316,12 +316,12 @@ void ToolMenuHandler::initToolItems() {
addToolItem(new ToolButton(listener, "ZOOM_FIT", ACTION_ZOOM_FIT, GTK_STOCK_ZOOM_FIT, _("Zoom fit to screen"), gui->get("menuViewZoomFit")));
addToolItem(new ToolButton(listener, "ZOOM_100", ACTION_ZOOM_100, GTK_STOCK_ZOOM_100, _("Zoom to 100%"), gui->get("menuViewZoom100")));
addToolItem(new ToolButton(listener, gui, "FULLSCREEN", ACTION_FULLSCREEN, GROUP_FULLSCREEN, "fullscreen.png", _("Toggle fullscreen"), gui->get(
addToolItem(new ToolButton(listener, gui, "FULLSCREEN", ACTION_FULLSCREEN, GROUP_FULLSCREEN, false, "fullscreen.png", _("Toggle fullscreen"), gui->get(
"menuViewFullScreen")));
addToolItem(new ColorToolItem("COLOR_SELECT", listener, toolHandler, 0xff0000, _("Select color"), true));
addToolItem(new ToolButton(listener, gui, "PEN", ACTION_TOOL_PEN, GROUP_TOOL, "tool_pencil.png", _("Pen"), gui->get("menuToolsPen")));
addToolItem(new ToolButton(listener, gui, "PEN", ACTION_TOOL_PEN, GROUP_TOOL, true, "tool_pencil.png", _("Pen"), gui->get("menuToolsPen")));
initEraserToolItem();
@ -377,28 +377,28 @@ void ToolMenuHandler::initToolItems() {
// TODO LOW PRIO: check for Stock icons (Mail from 04.01.2010 to Xournal mailinglist) gtk_icon_theme_load_icon
addToolItem(new ToolButton(listener, gui, "HILIGHTER", ACTION_TOOL_HILIGHTER, GROUP_TOOL, "tool_highlighter.png", _("Hilighter"), gui->get(
addToolItem(new ToolButton(listener, gui, "HILIGHTER", ACTION_TOOL_HILIGHTER, GROUP_TOOL, true, "tool_highlighter.png", _("Hilighter"), gui->get(
"menuToolsHighlighter")));
addToolItem(new ToolButton(listener, gui, "TEXT", ACTION_TOOL_TEXT, GROUP_TOOL, "tool_text.png", _("Text"), gui->get("menuToolsText")));
addToolItem(new ToolButton(listener, gui, "IMAGE", ACTION_TOOL_IMAGE, GROUP_TOOL, "tool_image.png", _("Image"), gui->get("menuToolsImage")));
addToolItem(new ToolButton(listener, gui, "TEXT", ACTION_TOOL_TEXT, GROUP_TOOL, true, "tool_text.png", _("Text"), gui->get("menuToolsText")));
addToolItem(new ToolButton(listener, gui, "IMAGE", ACTION_TOOL_IMAGE, GROUP_TOOL, true, "tool_image.png", _("Image"), gui->get("menuToolsImage")));
addToolItem(new ToolButton(listener, gui, "SELECT_REGION", ACTION_TOOL_SELECT_REGION, GROUP_TOOL, "lasso.png", _("Select Region"), gui->get(
addToolItem(new ToolButton(listener, gui, "SELECT_REGION", ACTION_TOOL_SELECT_REGION, GROUP_TOOL, true, "lasso.png", _("Select Region"), gui->get(
"menuToolsSelectRegion")));
addToolItem(new ToolButton(listener, gui, "SELECT_RECTANGLE", ACTION_TOOL_SELECT_RECT, GROUP_TOOL, "rect-select.png", _("Select Rectangle"), gui->get(
addToolItem(new ToolButton(listener, gui, "SELECT_RECTANGLE", ACTION_TOOL_SELECT_RECT, GROUP_TOOL, true, "rect-select.png", _("Select Rectangle"), gui->get(
"menuToolsSelectRectangle")));
addToolItem(new ToolButton(listener, gui, "VERTICAL_SPACE", ACTION_TOOL_VERTICAL_SPACE, GROUP_TOOL, "stretch.png", _("Vertical Space"), gui->get(
addToolItem(new ToolButton(listener, gui, "VERTICAL_SPACE", ACTION_TOOL_VERTICAL_SPACE, GROUP_TOOL, true, "stretch.png", _("Vertical Space"), gui->get(
"menuToolsVerticalSpace")));
addToolItem(new ToolButton(listener, gui, "HAND", ACTION_TOOL_HAND, GROUP_TOOL, "hand.png", _("Hand"), gui->get("menuToolsHand")));
addToolItem(new ToolButton(listener, gui, "HAND", ACTION_TOOL_HAND, GROUP_TOOL, true, "hand.png", _("Hand"), gui->get("menuToolsHand")));
addToolItem(new ToolButton(listener, gui, "SHAPE_RECOGNIZER", ACTION_SHAPE_RECOGNIZER, GROUP_SHAPE_RECOGNIZER, "shape_recognizer.png",
addToolItem(new ToolButton(listener, gui, "SHAPE_RECOGNIZER", ACTION_SHAPE_RECOGNIZER, GROUP_SHAPE_RECOGNIZER, false, "shape_recognizer.png",
_("Shape Recognizer"), gui->get("menuToolsShapeRecognizer")));
addToolItem(new ToolButton(listener, gui, "RULER", ACTION_RULER, GROUP_RULER, "ruler.png", _("Ruler"), gui->get("menuToolsRuler")));
addToolItem(new ToolButton(listener, gui, "RULER", ACTION_RULER, GROUP_RULER, false, "ruler.png", _("Ruler"), gui->get("menuToolsRuler")));
addToolItem(new ToolButton(listener, gui, "FINE", ACTION_SIZE_FINE, GROUP_SIZE, "thickness_thin.png", _("Thin")));
addToolItem(new ToolButton(listener, gui, "MEDIUM", ACTION_SIZE_MEDIUM, GROUP_SIZE, "thickness_medium.png", _("Medium")));
addToolItem(new ToolButton(listener, gui, "THICK", ACTION_SIZE_THICK, GROUP_SIZE, "thickness_thick.png", _("Thik")));
addToolItem(new ToolButton(listener, gui, "FINE", ACTION_SIZE_FINE, GROUP_SIZE, true, "thickness_thin.png", _("Thin")));
addToolItem(new ToolButton(listener, gui, "MEDIUM", ACTION_SIZE_MEDIUM, GROUP_SIZE, true, "thickness_medium.png", _("Medium")));
addToolItem(new ToolButton(listener, gui, "THICK", ACTION_SIZE_THICK, GROUP_SIZE, true, "thickness_thick.png", _("Thik")));
addToolItem(new ToolButton(listener, gui, "DEFAULT_TOOL", ACTION_TOOL_DEFAULT, GROUP_NOGROUP, "default.png", _("Default Tool"),
addToolItem(new ToolButton(listener, gui, "DEFAULT_TOOL", ACTION_TOOL_DEFAULT, GROUP_NOGROUP, false, "default.png", _("Default Tool"),
gui->get("menuToolsDefault")));
fontButton = new FontButton(listener, gui, "SELECT_FONT", ACTION_SELECT_FONT, _("Select Font"));
@ -411,7 +411,7 @@ void ToolMenuHandler::initToolItems() {
ToolZoomSlider * toolZoomSlider = new ToolZoomSlider(listener, "ZOOM_SLIDER", ACTION_FOOTER_ZOOM_SLIDER, zoom);
addToolItem(toolZoomSlider);
addToolItem(new ToolButton(listener, gui, "TWO_PAGES", ACTION_VIEW_TWO_PAGES, GROUP_TWOPAGES, "showtwopages.png", _("Two pages"), gui->get(
addToolItem(new ToolButton(listener, gui, "TWO_PAGES", ACTION_VIEW_TWO_PAGES, GROUP_TWOPAGES, false, "showtwopages.png", _("Two pages"), gui->get(
"menuViewTwoPages")));
toolPageLayer = new ToolPageLayer(gui, listener, "LAYER", ACTION_FOOTER_LAYER);

@ -7,7 +7,7 @@
#include <glib/gi18n-lib.h>
ToolSelectCombocontrol::ToolSelectCombocontrol(ToolMenuHandler * th, ActionHandler * handler, GladeGui * gui, String id) :
ToolButton(handler, gui, id, ACTION_TOOL_SELECT_RECT, GROUP_TOOL, "rect-select.png", _("Select Rectangle")) {
ToolButton(handler, gui, id, ACTION_TOOL_SELECT_RECT, GROUP_TOOL, true, "rect-select.png", _("Select Rectangle")) {
XOJ_INIT_TYPE(ToolSelectCombocontrol);

@ -1,5 +1,7 @@
#include "ToolbarData.h"
#include <string.h>
#include <glib.h>
#include <gtk/gtk.h>
ToolbarData::ToolbarData(bool predefined) {
XOJ_INIT_TYPE(ToolbarData);
@ -73,6 +75,27 @@ void ToolbarData::load(GKeyFile * config, const char * group) {
g_strfreev(keys);
}
void ToolbarData::saveToKeyFile(GKeyFile * config) {/* TODO: Debug
const char * group = getId().c_str();
for (it = this->contents.begin(); it != this->contents.end(); it++) {
ToolbarEntry & e = *it;
std::vector<String>::iterator itItem;
for (itItem = e.entries.begin(); itItem != e.entries.end(); itItem++) {
if (e.name.equals(toolbar)) {
std::vector<String>::iterator it2 = e.entries.begin();
it2 += position;
e.entries.insert(it2, item);
}
}
// g_key_file_set_string(config, )
*/
}
void ToolbarData::addItem(String toolbar, String item, int position) {
g_return_if_fail(isPredefined() == false);

@ -31,6 +31,7 @@ public:
bool isPredefined();
void load(GKeyFile * config, const char * group);
void saveToKeyFile(GKeyFile * config);
// Editing API
void addItem(String toolbar, String item, int position);

@ -100,31 +100,30 @@ bool ToolbarModel::parse(const char * file, bool predefined) {
const char * TOOLBAR_INI_HEADER =
"# Xournal++ Toolbar configuration\n"
"# Here you can customize the Toolbars\n"
"# Delte this file to generate a new config file with default values\n"
" Delte this file to generate a new config file with default values\n"
"\n"
"# Available buttons:\n"
"# File: NEW,SAVE,OPEN\n"
"#\n"
"# Edit: CUT,COPY,PASTE,SEARCH,UNDO,REDO,INSERT_NEW_PAGE\n"
"#\n"
"# Navigation: GOTO_FIRST,GOTO_BACK,GOTO_NEXT,GOTO_LAST,GOTO_NEXT_ANNOTATED_PAGE\n"
"#\n"
"# Zoom: ZOOM_OUT,ZOOM_IN,ZOOM_FIT,ZOOM_100,FULLSCREEN,TWO_PAGES\n"
"#\n"
"# Color: COLOR(0xffffff),COLOR(0xffff00),COLOR(0xff8000),COLOR(0xff00ff),COLOR(0x00ff00),COLOR(0x00c0ff),COLOR(0x808080),COLOR(0x008000),COLOR(0xff0000),COLOR(0x3333cc),COLOR(0x000000),COLOR_SELECT\n"
"# Notice: This are the default Xournal colors, each other color in HEX can also be used, eg COLOR(0x12ABCF);\n"
"#\n"
"# Tools: ERASER,PEN,HILIGHTER,IMAGE,TEXT,IMAGE,SELECT,SELECT_REGION,SELECT_RECTANGLE,VERTICAL_SPACE,HAND\n"
"# Notice: ERASER also has a drop down menu to select the eraser type, SELECT are all selection tools, with drop down menu\n"
"#\n"
"# Tool settings: SHAPE_RECOGNIZER,RULER,FINE,MEDIUM,THICK,SELECT_FONT\n"
"#\n"
"# Components: PAGE_SPIN,ZOOM_SLIDER,LAYER\n"
"# PAGE_SPIN: The page spiner, incl. current page label\n"
"# ZOOM_SLIDER: The zoom slider\n"
"# LAYER: The layer dropdown menu\n"
"#\n";
" Available buttons:\n"
" File: NEW,SAVE,OPEN\n"
"\n"
" Edit: CUT,COPY,PASTE,SEARCH,UNDO,REDO,INSERT_NEW_PAGE\n"
"\n"
" Navigation: GOTO_FIRST,GOTO_BACK,GOTO_NEXT,GOTO_LAST,GOTO_NEXT_ANNOTATED_PAGE\n"
"\n"
" Zoom: ZOOM_OUT,ZOOM_IN,ZOOM_FIT,ZOOM_100,FULLSCREEN,TWO_PAGES\n"
"\n"
" Color: COLOR(0xffffff),COLOR(0xffff00),COLOR(0xff8000),COLOR(0xff00ff),COLOR(0x00ff00),COLOR(0x00c0ff),COLOR(0x808080),COLOR(0x008000),COLOR(0xff0000),COLOR(0x3333cc),COLOR(0x000000),COLOR_SELECT\n"
" Notice: This are the default Xournal colors, each other color in HEX can also be used, eg COLOR(0x12ABCF);\n"
"\n"
" Tools: ERASER,PEN,HILIGHTER,IMAGE,TEXT,IMAGE,SELECT,SELECT_REGION,SELECT_RECTANGLE,VERTICAL_SPACE,HAND\n"
" Notice: ERASER also has a drop down menu to select the eraser type, SELECT are all selection tools, with drop down menu\n"
"\n"
" Tool settings: SHAPE_RECOGNIZER,RULER,FINE,MEDIUM,THICK,SELECT_FONT\n"
"\n"
" Components: PAGE_SPIN,ZOOM_SLIDER,LAYER\n"
" PAGE_SPIN: The page spiner, incl. current page label\n"
" ZOOM_SLIDER: The zoom slider\n"
" LAYER: The layer dropdown menu\n"
"\n";
void ToolbarModel::save(const char * filename) {
GKeyFile * config = g_key_file_new();
@ -132,10 +131,10 @@ void ToolbarModel::save(const char * filename) {
g_key_file_set_comment(config, NULL, NULL, TOOLBAR_INI_HEADER, NULL);
printf("->:::::%s\n",filename);
// g_key_file_set_string(config, )
for(GList * l = this->toolbars; l != NULL; l = l->next) {
ToolbarData * data = (ToolbarData *)l->data;
data->saveToKeyFile(config);
}
gsize len = 0;
char * data = g_key_file_to_data(config, &len, NULL);

@ -64,13 +64,13 @@ GtkWidget * gtk_xournal_new(XournalView * view, GtkRange * hrange, GtkRange * vr
xoj->lastWidgetSize = 0;
xoj->hrange = hrange;
xoj->vrange = vrange;
xoj->hadj = hrange->adjustment;
xoj->vadj = vrange->adjustment;
xoj->hadj = gtk_range_get_adjustment(hrange);
xoj->vadj = gtk_range_get_adjustment(vrange);
xoj->currentInputPage = NULL;
xoj->pagePositionCache = new PagePositionCache();
xoj->vadj->step_increment = 20;
xoj->hadj->step_increment = 20;
gtk_adjustment_set_step_increment(xoj->vadj, 20);
gtk_adjustment_set_step_increment(xoj->hadj, 20);
xoj->lastMousePositionX = 0;
xoj->lastMousePositionY = 0;
@ -142,9 +142,12 @@ void gtk_xournal_set_size(GtkWidget * widget, int width, int height) {
gtk_adjustment_set_upper(xournal->hadj, width);
gtk_adjustment_set_upper(xournal->vadj, height);
gtk_widget_set_visible(GTK_WIDGET(xournal->vrange), widget->allocation.height < xournal->height);
GtkAllocation alloc;
gtk_widget_get_allocation(widget, &alloc);
gtk_widget_set_visible(GTK_WIDGET(xournal->vrange), alloc.height < xournal->height);
bool showHorizontalScrollbar = widget->allocation.width < xournal->width;
bool showHorizontalScrollbar = alloc.width < xournal->width;
gtk_widget_set_visible(GTK_WIDGET(xournal->hrange), showHorizontalScrollbar);
}
@ -184,7 +187,7 @@ static gboolean gtk_xournal_key_press_event(GtkWidget * widget, GdkEventKey * ev
if (selection) {
int d = 10;
if (event->state & GDK_MOD1_MASK || event->state & GDK_SHIFT_MASK) {
if ((event->state & GDK_MOD1_MASK) || (event->state & GDK_SHIFT_MASK)) {
d = 1;
}
@ -246,20 +249,20 @@ void gtk_xournal_scroll_relative(GtkWidget * widget, double x, double y) {
}
gdouble gtk_xournal_get_wheel_delta(GtkRange * range, GdkScrollDirection direction) {
GtkAdjustment * adj = range->adjustment;
GtkAdjustment * adj = gtk_range_get_adjustment(range);
gdouble delta;
if (GTK_IS_SCROLLBAR (range)) {
delta = pow(adj->page_size, 2.0 / 3.0);
delta = pow(gtk_adjustment_get_page_size(adj), 2.0 / 3.0);
} else {
delta = adj->step_increment * 2;
delta = gtk_adjustment_get_step_increment(adj) * 2;
}
if (direction == GDK_SCROLL_UP || direction == GDK_SCROLL_LEFT) {
delta = -delta;
}
if (range->inverted) {
if (gtk_range_get_inverted(range)) {
delta = -delta;
}
@ -271,7 +274,7 @@ gboolean gtk_xournal_scroll_event(GtkWidget * widget, GdkEventScroll * event) {
// true: Core event, false: XInput event
gboolean isCore = (event->device == gdk_device_get_core_pointer());
printf("DEBUG: Scroll (%s) (x,y)=(%.2f,%.2f), direction %d, modifier %x, isCore %i\n", event->device->name, event->x, event->y, event->direction,
printf("DEBUG: Scroll (%s) (x,y)=(%.2f,%.2f), direction %d, modifier %x, isCore %i\n", gdk_device_get_name(event->device), event->x, event->y, event->direction,
event->state, isCore);
#endif
@ -288,10 +291,10 @@ gboolean gtk_xournal_scroll_event(GtkWidget * widget, GdkEventScroll * event) {
}
if (range && gtk_widget_get_visible(GTK_WIDGET(range))) {
GtkAdjustment * adj = range->adjustment;
GtkAdjustment * adj = gtk_range_get_adjustment(range);
double delta = gtk_xournal_get_wheel_delta(GTK_RANGE(range), event->direction);
double new_value = CLAMP (adj->value + delta, adj->lower, adj->upper - adj->page_size);
double new_value = CLAMP (gtk_adjustment_get_value(adj) + delta, gtk_adjustment_get_lower(adj), gtk_adjustment_get_upper(adj) - gtk_adjustment_get_page_size(adj));
gtk_adjustment_set_value(adj, new_value);
return true;
@ -394,7 +397,7 @@ gboolean gtk_xournal_button_press_event(GtkWidget * widget, GdkEventButton * eve
*/
gboolean isCore = (event->device == gdk_device_get_core_pointer());
printf("DEBUG: ButtonPress (%s) (x,y)=(%.2f,%.2f), button %d, modifier %x, isCore %i\n", event->device->name, event->x, event->y, event->button,
printf("DEBUG: ButtonPress (%s) (x,y)=(%.2f,%.2f), button %d, modifier %x, isCore %i\n", gdk_device_get_name(event->device), event->x, event->y, event->button,
event->state, isCore);
#endif
XInputUtils::fixXInputCoords((GdkEvent*) event, widget);
@ -488,7 +491,7 @@ gboolean gtk_xournal_button_press_event(GtkWidget * widget, GdkEventButton * eve
gboolean gtk_xournal_button_release_event(GtkWidget * widget, GdkEventButton * event) {
#ifdef INPUT_DEBUG
gboolean isCore = (event->device == gdk_device_get_core_pointer());
printf("DEBUG: ButtonRelease (%s) (x,y)=(%.2f,%.2f), button %d, modifier %x, isCore %i\n", event->device->name, event->x, event->y, event->button,
printf("DEBUG: ButtonRelease (%s) (x,y)=(%.2f,%.2f), button %d, modifier %x, isCore %i\n", gdk_device_get_name(event->device), event->x, event->y, event->button,
event->state, isCore);
#endif
XInputUtils::fixXInputCoords((GdkEvent*) event, widget);

Loading…
Cancel
Save