Commit bb43e7c
Lock for blocking background process
Changed files (12)
modifiedlibbirdfont/GlyphCanvas.valamodifiedlibbirdfont/KerningDisplay.valamodifiedlibbirdfont/LoadCallback.valamodifiedlibbirdfont/MenuTab.valamodifiedlibbirdfont/RecentFiles.valamodifiedlibbirdfont/SaveCallback.valamodifiedlibbirdfont/SpacingTab.valamodifiedlibbirdfont/StrokeTool.valamodifiedlibbirdfont/TabBar.valamodifiedlibbirdfont/TabContent.valamodifiedlibbirdfont/Toolbox.valamodifiedlibbirdfont/ZoomBar.vala
Diff
@@ -81,7 +81,7 @@ public class GlyphCanvas : GLib.Object { } public void redraw_area (int x, int y, int w, int h) { - if (MenuTab.suppress_event) { + if (MenuTab.has_suppress_event ()) { warning ("Do not call redraw from background thread."); } else { signal_redraw_area (x, y, w, h); @@ -392,7 +392,7 @@ public class KerningDisplay : FontDisplay { public void set_absolute_kerning (int handle, double val) { double kern; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -612,7 +612,7 @@ public class KerningDisplay : FontDisplay { public override void key_press (uint keyval) { unichar c; - if (MenuTab.suppress_event) { // don't update kerning while saving font+ if (MenuTab.has_suppress_event ()) { // don't update kerning while saving font return; } @@ -680,7 +680,7 @@ public class KerningDisplay : FontDisplay { listener.signal_text_input.connect ((text) => { submitted_value = text; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -719,7 +719,7 @@ public class KerningDisplay : FontDisplay { Glyph? g; string name; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -752,7 +752,7 @@ public class KerningDisplay : FontDisplay { public override void motion_notify (double ex, double ey) { double k, y; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -866,7 +866,7 @@ public class KerningDisplay : FontDisplay { TextListener listener; string kerning = @"$(get_kerning_for_handle (selected_handle))"; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -880,7 +880,7 @@ public class KerningDisplay : FontDisplay { string submitted_value; double parsed_value; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -916,7 +916,7 @@ public class KerningDisplay : FontDisplay { public void add_text (string t) { int c; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -932,7 +932,7 @@ public class KerningDisplay : FontDisplay { UndoItem ui; UndoItem redo_state; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -951,7 +951,7 @@ public class KerningDisplay : FontDisplay { public override void redo () { UndoItem ui; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -39,7 +39,7 @@ public class LoadCallback : GLib.Object { } public void load () {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -73,7 +73,7 @@ public class LoadCallback : GLib.Object { private void load_new_font () { FileChooser fc = new FileChooser (); - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -23,7 +23,7 @@ public class MenuTab : FontDisplay { * * This variable is used only in the gui thread. */- public static bool suppress_event;+ private static bool suppress_event; /** True if the background thread is running. */ public static bool background_thread;@@ -48,6 +48,16 @@ public class MenuTab : FontDisplay { background_thread = false; } + public static bool has_suppress_event () {+ bool suppress;+ + lock (suppress_event) {+ suppress = suppress_event;+ }+ + return suppress;+ }+ public static void set_save_callback (SaveCallback c) { if (!save_callback.is_done) { warning ("Prevoius save command has not finished");@@ -567,7 +577,7 @@ public class MenuTab : FontDisplay { } public static void save_as () {- if (MenuTab.suppress_event || !save_callback.is_done) {+ if (MenuTab.has_suppress_event () || !save_callback.is_done) { warn_if_test ("Event suppressed"); return; }@@ -577,7 +587,7 @@ public class MenuTab : FontDisplay { } public static void save () {- if (MenuTab.suppress_event && !save_callback.is_done) {+ if (MenuTab.has_suppress_event () && !save_callback.is_done) { warn_if_test ("Event suppressed"); return; }@@ -587,7 +597,7 @@ public class MenuTab : FontDisplay { } public static void load () {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -201,7 +201,7 @@ public class RecentFiles : Table { Font font; SaveDialogListener dialog = new SaveDialogListener (); - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -211,7 +211,7 @@ public class RecentFiles : Table { MenuTab.load_callback.file_loaded.connect (() => { Font f; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warning ("Load font event suppressed."); return; }@@ -234,7 +234,7 @@ public class RecentFiles : Table { dialog.signal_discard.connect (() => { Font f; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -250,7 +250,7 @@ public class RecentFiles : Table { }); dialog.signal_save.connect (() => {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed."); return; }@@ -26,7 +26,7 @@ public class SaveCallback : GLib.Object { } public void save_as () {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -71,7 +71,7 @@ public class SaveCallback : GLib.Object { Font f; string fn; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -234,7 +234,7 @@ public class SpacingTab : KerningDisplay { listener.signal_text_input.connect ((text) => { submitted_value = text; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -278,7 +278,7 @@ public class SpacingTab : KerningDisplay { listener.signal_text_input.connect ((text) => { submitted_value = text; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -948,6 +948,11 @@ public class StrokeTool : Tool { foreach (EditPoint e in p.points) { if ((e.flags & EditPoint.CURVE) == 0) { p.set_new_start (e);+ print(@"start: $(e)");+ + // FIXME:+ e.get_left_handle ().convert_to_line ();+ break; } }@@ -1033,7 +1038,7 @@ public class StrokeTool : Tool { simplified.add_point (ep.copy ()); } }-+ simplified.recalculate_linear_handles (); simplified.close (); remove_single_point_intersections (simplified);@@ -1337,6 +1342,9 @@ public class StrokeTool : Tool { previous_handle = previous.get_left_handle (); next_handle = next.get_right_handle (); + previous_handle.convert_to_line ();+ next_handle.convert_to_line ();+ previous_handle.angle += PI; next_handle.angle += PI; @@ -85,7 +85,7 @@ public class TabBar : GLib.Object { public void motion (double x, double y) { MainWindow.set_cursor (NativeWindow.VISIBLE); - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -170,7 +170,7 @@ public class TabBar : GLib.Object { public bool select_char (string s) { int i = 0; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return false; }@@ -187,7 +187,7 @@ public class TabBar : GLib.Object { } public bool select_tab_name (string s) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return false; }@@ -196,7 +196,7 @@ public class TabBar : GLib.Object { } public void select_overview () {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -208,7 +208,7 @@ public class TabBar : GLib.Object { Tab t; bool open; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -228,7 +228,7 @@ public class TabBar : GLib.Object { public void close_display (FontDisplay f) { int i = -1; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -248,7 +248,7 @@ public class TabBar : GLib.Object { } public void close_all_tabs () {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -266,7 +266,7 @@ public class TabBar : GLib.Object { Tab empty_tab; GlyphCollection gc; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return false; }@@ -331,7 +331,7 @@ public class TabBar : GLib.Object { public bool selected_open_tab (Tab t) { int i = 0; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return false; }@@ -369,7 +369,7 @@ public class TabBar : GLib.Object { public bool selected_open_tab_by_name (string t) { int i = 0; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return false; }@@ -407,7 +407,7 @@ public class TabBar : GLib.Object { public void select_tab (int index, bool signal_selected = true) { Tab t; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -567,7 +567,7 @@ public class TabBar : GLib.Object { int s = (tabs.size == 0) ? 0 : selected + 1; Tab t; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -596,7 +596,7 @@ public class TabBar : GLib.Object { public bool add_unique_tab (FontDisplay display_item, bool signal_selected = true) { bool i; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return false; }@@ -31,14 +31,14 @@ public class TabContent : GLib.Object { static double last_press_time = 0; public static void zoom_in () {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { } GlyphCanvas.current_display.zoom_in (); } public static void zoom_out () {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -46,7 +46,7 @@ public class TabContent : GLib.Object { } public static void move_view (double x, double y) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -54,7 +54,7 @@ public class TabContent : GLib.Object { } public static bool has_scrollbar () {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return false; } @@ -62,7 +62,7 @@ public class TabContent : GLib.Object { } public static void scroll_to (double percent) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -73,7 +73,7 @@ public class TabContent : GLib.Object { AbstractMenu menu; Dialog dialog; - if (unlikely (MenuTab.suppress_event)) {+ if (unlikely (MenuTab.has_suppress_event ())) { cr.save (); Theme.color (cr, "Background 1"); cr.rectangle (0, 0, allocation.width, allocation.height);@@ -118,7 +118,7 @@ public class TabContent : GLib.Object { Context cr; WidgetAllocation alloc; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warning ("Background surface already created."); return; }@@ -131,7 +131,7 @@ public class TabContent : GLib.Object { } public static void key_press (uint keyval) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -146,7 +146,7 @@ public class TabContent : GLib.Object { } public static void key_release (uint keyval) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -160,7 +160,7 @@ public class TabContent : GLib.Object { public static void motion_notify (double x, double y) { Toolbox toolbox; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -176,7 +176,7 @@ public class TabContent : GLib.Object { } public static void button_release (int button, double x, double y) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -194,7 +194,7 @@ public class TabContent : GLib.Object { } public static void button_press (uint button, double x, double y) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -217,7 +217,7 @@ public class TabContent : GLib.Object { } public static void double_click (uint button, double ex, double ey) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -229,7 +229,7 @@ public class TabContent : GLib.Object { public static void scroll_wheel_pixel_delta (double x, double y, double pixeldelta_x, double pixeldelta_y) { - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -239,7 +239,7 @@ public class TabContent : GLib.Object { } public static void scroll_wheel_up (double x, double y) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -249,7 +249,7 @@ public class TabContent : GLib.Object { } public static void scroll_wheel_down (double x, double y) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -259,7 +259,7 @@ public class TabContent : GLib.Object { } public static void tap_down (int finger, int x, int y) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -269,7 +269,7 @@ public class TabContent : GLib.Object { } public static void tap_up (int finger, int x, int y) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -279,7 +279,7 @@ public class TabContent : GLib.Object { } public static void tap_move (int finger, int x, int y) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -289,7 +289,7 @@ public class TabContent : GLib.Object { } public static void undo () {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -297,7 +297,7 @@ public class TabContent : GLib.Object { } public static void redo () {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { return; } @@ -144,7 +144,7 @@ public class Toolbox : GLib.Object { } public void press (uint button, double x, double y) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -171,7 +171,7 @@ public class Toolbox : GLib.Object { y -= current_set.scroll; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -198,7 +198,7 @@ public class Toolbox : GLib.Object { } public void double_click (uint button, double x, double y) {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -219,7 +219,7 @@ public class Toolbox : GLib.Object { y -= current_set.scroll; - if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Event suppressed"); return; }@@ -331,7 +331,7 @@ public class Toolbox : GLib.Object { } public static void redraw_tool_box () {- if (MenuTab.suppress_event) {+ if (MenuTab.has_suppress_event ()) { warn_if_test ("Don't redraw toolbox when background thread is running."); return; }@@ -79,7 +79,7 @@ public class ZoomBar : Tool { set_zoom (zoom_level); - if (!MenuTab.suppress_event) {+ if (!MenuTab.has_suppress_event ()) { new_zoom (zoom_level); }