diff --git a/src/control/Control.cpp b/src/control/Control.cpp index 0deffdf7..4450310f 100644 --- a/src/control/Control.cpp +++ b/src/control/Control.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: diff --git a/src/control/Control.h b/src/control/Control.h index 968bc3e8..0f6ebc37 100644 --- a/src/control/Control.h +++ b/src/control/Control.h @@ -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); diff --git a/src/gui/toolbarMenubar/AbstractItem.cpp b/src/gui/toolbarMenubar/AbstractItem.cpp index 1c01d271..35cb0195 100644 --- a/src/gui/toolbarMenubar/AbstractItem.cpp +++ b/src/gui/toolbarMenubar/AbstractItem.cpp @@ -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); } diff --git a/src/gui/toolbarMenubar/AbstractToolItem.cpp b/src/gui/toolbarMenubar/AbstractToolItem.cpp index 33411abf..4d708ddf 100644 --- a/src/gui/toolbarMenubar/AbstractToolItem.cpp +++ b/src/gui/toolbarMenubar/AbstractToolItem.cpp @@ -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); } diff --git a/src/gui/toolbarMenubar/AbstractToolItem.h b/src/gui/toolbarMenubar/AbstractToolItem.h index 6eb9469d..f97a56a7 100644 --- a/src/gui/toolbarMenubar/AbstractToolItem.h +++ b/src/gui/toolbarMenubar/AbstractToolItem.h @@ -45,6 +45,9 @@ protected: GtkToolItem * item; GtkWidget * popupMenu; + bool toolToggleButtonActive; + bool toolToggleOnlyEnable; + bool used; }; diff --git a/src/gui/toolbarMenubar/ToolButton.cpp b/src/gui/toolbarMenubar/ToolButton.cpp index 34d15768..2be4ac1e 100644 --- a/src/gui/toolbarMenubar/ToolButton.cpp +++ b/src/gui/toolbarMenubar/ToolButton.cpp @@ -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() { diff --git a/src/gui/toolbarMenubar/ToolButton.h b/src/gui/toolbarMenubar/ToolButton.h index c04abef6..c163a33d 100644 --- a/src/gui/toolbarMenubar/ToolButton.h +++ b/src/gui/toolbarMenubar/ToolButton.h @@ -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(); diff --git a/src/gui/toolbarMenubar/ToolMenuHandler.cpp b/src/gui/toolbarMenubar/ToolMenuHandler.cpp index 40058939..ebd786dc 100644 --- a/src/gui/toolbarMenubar/ToolMenuHandler.cpp +++ b/src/gui/toolbarMenubar/ToolMenuHandler.cpp @@ -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); diff --git a/src/gui/toolbarMenubar/ToolSelectCombocontrol.cpp b/src/gui/toolbarMenubar/ToolSelectCombocontrol.cpp index f45d244e..503a0cbe 100644 --- a/src/gui/toolbarMenubar/ToolSelectCombocontrol.cpp +++ b/src/gui/toolbarMenubar/ToolSelectCombocontrol.cpp @@ -7,7 +7,7 @@ #include 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); diff --git a/src/gui/toolbarMenubar/model/ToolbarData.cpp b/src/gui/toolbarMenubar/model/ToolbarData.cpp index d1e700b4..fd9d5836 100644 --- a/src/gui/toolbarMenubar/model/ToolbarData.cpp +++ b/src/gui/toolbarMenubar/model/ToolbarData.cpp @@ -1,5 +1,7 @@ #include "ToolbarData.h" #include +#include +#include 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::iterator itItem; + for (itItem = e.entries.begin(); itItem != e.entries.end(); itItem++) { + + + if (e.name.equals(toolbar)) { + std::vector::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); diff --git a/src/gui/toolbarMenubar/model/ToolbarData.h b/src/gui/toolbarMenubar/model/ToolbarData.h index e5d49ed5..0c485576 100644 --- a/src/gui/toolbarMenubar/model/ToolbarData.h +++ b/src/gui/toolbarMenubar/model/ToolbarData.h @@ -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); diff --git a/src/gui/toolbarMenubar/model/ToolbarModel.cpp b/src/gui/toolbarMenubar/model/ToolbarModel.cpp index 3e974318..553dfb7c 100644 --- a/src/gui/toolbarMenubar/model/ToolbarModel.cpp +++ b/src/gui/toolbarMenubar/model/ToolbarModel.cpp @@ -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); diff --git a/src/gui/widgets/XournalWidget.cpp b/src/gui/widgets/XournalWidget.cpp index 59bd1340..b00c8b7a 100644 --- a/src/gui/widgets/XournalWidget.cpp +++ b/src/gui/widgets/XournalWidget.cpp @@ -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);