Index: src/Makefile.dep =================================================================== --- src/Makefile.dep (revision 6738) +++ src/Makefile.dep (revision 6739) @@ -818,7 +818,9 @@ ../src_plugins/hid_gtk/hid_gtk_conf.h conf.h \ ../src_plugins/lib_gtk_common/bu_cursor_pos.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ - ../src_plugins/lib_gtk_common/dlg_propedit.h + ../src_plugins/lib_gtk_common/in_mouse.h \ + ../src_plugins/lib_gtk_common/dlg_propedit.h \ + ../src_plugins/lib_gtk_common/in_mouse.h ../src_plugins/hid_gtk/ghid-main-menu.o: \ ../src_plugins/hid_gtk/ghid-main-menu.c ../src_3rd/liblihata/tree.h \ ../src_3rd/liblihata/dom.h ../src_3rd/liblihata/lihata.h \ @@ -848,7 +850,9 @@ ../src_plugins/hid_gtk/hid_gtk_conf.h conf.h \ ../src_plugins/lib_gtk_common/bu_cursor_pos.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ - ../src_plugins/lib_gtk_common/dlg_propedit.h pcb-printf.h misc_util.h \ + ../src_plugins/lib_gtk_common/in_mouse.h \ + ../src_plugins/lib_gtk_common/dlg_propedit.h \ + ../src_plugins/lib_gtk_common/in_mouse.h pcb-printf.h misc_util.h \ error.h ../src_plugins/hid_gtk/gschem_accel_label.h ../src_plugins/hid_gtk/gschem_accel_label.o: \ ../src_plugins/hid_gtk/gschem_accel_label.c ../config.h \ @@ -894,8 +898,10 @@ ../src_plugins/hid_gtk/hid_gtk_conf.h conf.h \ ../src_plugins/lib_gtk_common/bu_cursor_pos.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ - ../src_plugins/lib_gtk_common/dlg_propedit.h hid_draw_helpers.h \ - hid_attrib.h hid_helper.h hid_color.h + ../src_plugins/lib_gtk_common/in_mouse.h \ + ../src_plugins/lib_gtk_common/dlg_propedit.h \ + ../src_plugins/lib_gtk_common/in_mouse.h hid_draw_helpers.h hid_attrib.h \ + hid_helper.h hid_color.h ../src_plugins/hid_gtk/gtkhid-main.o: \ ../src_plugins/hid_gtk/gtkhid-main.c ../config.h conf_core.h conf.h \ global_typedefs.h pcb_bool.h unit.h pcb-printf.h \ @@ -925,11 +931,12 @@ ../src_plugins/hid_gtk/hid_gtk_conf.h conf.h \ ../src_plugins/lib_gtk_common/bu_cursor_pos.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ - ../src_plugins/lib_gtk_common/dlg_propedit.h hid_nogui.h \ - hid_draw_helpers.h pcb-printf.h plugins.h hid_attrib.h hid_init.h \ - hid_flags.h hid_actions.h plug_footprint.h vtlibrary.h plug_io.h \ - misc_util.h layer.h compat_nls.h layer_vis.h \ - ../src_plugins/hid_gtk/gtkhid-main.h conf_hid.h \ + ../src_plugins/lib_gtk_common/in_mouse.h \ + ../src_plugins/lib_gtk_common/dlg_propedit.h \ + ../src_plugins/lib_gtk_common/in_mouse.h hid_nogui.h hid_draw_helpers.h \ + pcb-printf.h plugins.h hid_attrib.h hid_init.h hid_flags.h hid_actions.h \ + plug_footprint.h vtlibrary.h plug_io.h misc_util.h layer.h compat_nls.h \ + layer_vis.h ../src_plugins/hid_gtk/gtkhid-main.h conf_hid.h \ ../src_plugins/lib_gtk_common/act_fileio.h \ ../src_plugins/lib_gtk_common/act_print.h \ ../src_plugins/lib_gtk_common/bu_status_line.h \ @@ -946,8 +953,7 @@ ../src_plugins/lib_gtk_common/dlg_progress.h \ ../src_plugins/lib_gtk_common/dlg_report.h \ ../src_plugins/lib_gtk_common/dlg_pinout.h obj_elem.h \ - ../src_plugins/lib_gtk_common/dlg_search.h \ - ../src_plugins/lib_gtk_common/in_mouse.h dolists.h \ + ../src_plugins/lib_gtk_common/dlg_search.h dolists.h \ ../src_plugins/hid_gtk/hid_gtk_conf_fields.h ../src_plugins/hid_gtk/gui-command-window.o: \ ../src_plugins/hid_gtk/gui-command-window.c ../config.h conf_core.h \ @@ -977,7 +983,9 @@ ../src_plugins/hid_gtk/hid_gtk_conf.h conf.h \ ../src_plugins/lib_gtk_common/bu_cursor_pos.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ - ../src_plugins/lib_gtk_common/dlg_propedit.h crosshair.h hid_actions.h \ + ../src_plugins/lib_gtk_common/in_mouse.h \ + ../src_plugins/lib_gtk_common/dlg_propedit.h \ + ../src_plugins/lib_gtk_common/in_mouse.h crosshair.h hid_actions.h \ compat_nls.h ../src_plugins/lib_gtk_common/bu_text_view.h \ ../src_plugins/lib_gtk_common/bu_status_line.h \ ../src_plugins/lib_gtk_common/util_str.h @@ -1009,7 +1017,9 @@ ../src_plugins/hid_gtk/hid_gtk_conf.h conf.h \ ../src_plugins/lib_gtk_common/bu_cursor_pos.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ + ../src_plugins/lib_gtk_common/in_mouse.h \ ../src_plugins/lib_gtk_common/dlg_propedit.h \ + ../src_plugins/lib_gtk_common/in_mouse.h \ ../src_plugins/hid_gtk/gtkhid-main.h conf_hid.h action_helper.h change.h \ plug_io.h error.h draw.h pcb-printf.h hid_attrib.h misc_util.h \ ../src_plugins/hid_gtk/gtk_conf_list.h paths.h plug_footprint.h \ @@ -1055,7 +1065,9 @@ ../src_plugins/hid_gtk/hid_gtk_conf.h conf.h \ ../src_plugins/lib_gtk_common/bu_cursor_pos.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ + ../src_plugins/lib_gtk_common/in_mouse.h \ ../src_plugins/lib_gtk_common/dlg_propedit.h \ + ../src_plugins/lib_gtk_common/in_mouse.h \ ../src_plugins/hid_gtk/gui-drc-window.h hid_actions.h compat_nls.h \ obj_all.h obj_pinvia_draw.h obj_pad_draw.h obj_rat_draw.h \ obj_line_draw.h obj_arc_draw.h obj_poly_draw.h layer_vis.h \ @@ -1089,7 +1101,9 @@ ../src_plugins/hid_gtk/hid_gtk_conf.h conf.h \ ../src_plugins/lib_gtk_common/bu_cursor_pos.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ - ../src_plugins/lib_gtk_common/dlg_propedit.h buffer.h plug_footprint.h \ + ../src_plugins/lib_gtk_common/in_mouse.h \ + ../src_plugins/lib_gtk_common/dlg_propedit.h \ + ../src_plugins/lib_gtk_common/in_mouse.h buffer.h plug_footprint.h \ vtlibrary.h compat_nls.h ../src_plugins/lib_gtk_common/bu_box.h \ ../src_plugins/lib_gtk_common/wt_preview.h obj_elem.h layer.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h \ @@ -1123,7 +1137,9 @@ ../src_plugins/hid_gtk/hid_gtk_conf.h conf.h \ ../src_plugins/lib_gtk_common/bu_cursor_pos.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ - ../src_plugins/lib_gtk_common/dlg_propedit.h pcb-printf.h hid_actions.h \ + ../src_plugins/lib_gtk_common/in_mouse.h \ + ../src_plugins/lib_gtk_common/dlg_propedit.h \ + ../src_plugins/lib_gtk_common/in_mouse.h pcb-printf.h hid_actions.h \ compat_nls.h ../src_plugins/hid_gtk/gtkhid-main.h \ ../src_plugins/lib_gtk_common/win_place.h \ ../src_plugins/lib_gtk_common/bu_text_view.h @@ -1157,7 +1173,9 @@ ../src_plugins/hid_gtk/hid_gtk_conf.h conf.h \ ../src_plugins/lib_gtk_common/bu_cursor_pos.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ + ../src_plugins/lib_gtk_common/in_mouse.h \ ../src_plugins/lib_gtk_common/dlg_propedit.h \ + ../src_plugins/lib_gtk_common/in_mouse.h \ ../src_plugins/lib_gtk_common/util_str.h \ ../src_plugins/lib_gtk_common/win_place.h \ ../src_plugins/lib_gtk_common/bu_text_view.h \ @@ -1191,12 +1209,13 @@ ../src_plugins/hid_gtk/hid_gtk_conf.h conf.h \ ../src_plugins/lib_gtk_common/bu_cursor_pos.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ - ../src_plugins/lib_gtk_common/dlg_propedit.h action_helper.h crosshair.h \ + ../src_plugins/lib_gtk_common/in_mouse.h \ + ../src_plugins/lib_gtk_common/dlg_propedit.h \ + ../src_plugins/lib_gtk_common/in_mouse.h action_helper.h crosshair.h \ draw.h error.h layer.h find.h search.h rats.h netlist.h route_style.h \ rats.h ../src_plugins/hid_gtk/gtkhid-main.h conf_hid.h \ ../src_plugins/lib_gtk_common/bu_dwg_tooltip.h \ ../src_plugins/lib_gtk_common/bu_status_line.h \ - ../src_plugins/lib_gtk_common/in_mouse.h \ ../src_plugins/lib_gtk_common/in_keyboard.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h ../src_plugins/hid_gtk/gui-top-window.o: \ @@ -1227,7 +1246,9 @@ ../src_plugins/hid_gtk/hid_gtk_conf.h conf.h \ ../src_plugins/lib_gtk_common/bu_cursor_pos.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ - ../src_plugins/lib_gtk_common/dlg_propedit.h hid_cfg_action.h \ + ../src_plugins/lib_gtk_common/in_mouse.h \ + ../src_plugins/lib_gtk_common/dlg_propedit.h \ + ../src_plugins/lib_gtk_common/in_mouse.h hid_cfg_action.h \ action_helper.h buffer.h change.h copy.h crosshair.h draw.h error.h \ plug_io.h find.h insert.h layer.h move.h pcb-printf.h polygon.h rtree.h \ rats.h netlist.h route_style.h remove.h rotate.h search.h rats.h \ @@ -1241,7 +1262,6 @@ ../src_plugins/lib_gtk_common/dlg_route_style.h \ ../src_plugins/lib_gtk_common/wt_route_style.h \ ../src_plugins/lib_gtk_common/util_str.h \ - ../src_plugins/lib_gtk_common/in_mouse.h \ ../src_plugins/lib_gtk_common/in_keyboard.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h \ ../src_plugins/lib_gtk_common/win_place.h @@ -2135,7 +2155,7 @@ ../src_3rd/liblihata/genht/ht.h ../src_3rd/liblihata/genht/ht_inlines.h \ obj_poly_list.h obj_poly.h polyarea.h obj_text_list.h obj_rat_list.h \ obj_rat.h layer_grp.h library.h rats_patch.h board.h font.h box.h \ - math_helper.h move.h misc_util.h hid.h error.h drc.h \ + math_helper.h move.h misc_util.h hid.h error.h drc.h compat_misc.h \ ../src_plugins/lib_gtk_common/dlg_file_chooser.h compat_nls.h plug_io.h \ conf.h pcb-printf.h ../src_3rd/genvector/gds_char.h \ ../src_3rd/liblihata/lihata.h ../src_3rd/liblihata/dom.h \ @@ -2170,6 +2190,8 @@ copy.h data.h crosshair.h vtonpoint.h hid.h buffer.h draw.h move.h \ rotate.h macro.h ../src_plugins/lib_gtk_common/wt_preview.h layer.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ + ../src_plugins/lib_gtk_common/in_mouse.h hid_cfg_input.h \ + ../src_3rd/liblihata/genht/htip.h hid_cfg.h \ ../src_plugins/lib_gtk_common/win_place.h ../src_plugins/lib_gtk_common/dlg_print.o: \ ../src_plugins/lib_gtk_common/dlg_print.c ../config.h conf_core.h conf.h \ @@ -2276,19 +2298,16 @@ ../src_3rd/liblihata/parser.h ../src_3rd/liblihata/genht/htsp.h \ ../src_3rd/liblihata/genht/ht.h ../src_3rd/liblihata/genht/ht_inlines.h \ ../src_3rd/liblihata/genht/htip.h hid_cfg.h \ - ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h + ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ + ../src_plugins/lib_gtk_common/in_mouse.h ../src_plugins/lib_gtk_common/in_mouse.o: \ - ../src_plugins/lib_gtk_common/in_mouse.c \ + ../src_plugins/lib_gtk_common/in_mouse.c ../config.h \ ../src_plugins/lib_gtk_common/in_mouse.h hid_cfg_input.h \ ../src_3rd/liblihata/dom.h ../src_3rd/liblihata/lihata.h \ ../src_3rd/liblihata/parser.h ../src_3rd/liblihata/genht/htsp.h \ ../src_3rd/liblihata/genht/ht.h ../src_3rd/liblihata/genht/ht_inlines.h \ - ../src_3rd/liblihata/genht/htip.h hid_cfg.h \ - ../src_plugins/lib_gtk_common/in_keyboard.h \ - ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h ../config.h pcb_bool.h \ - ../src_plugins/lib_gtk_common/bu_status_line.h \ - ../src_plugins/lib_gtk_common/../hid_gtk/gui.h board.h const.h macro.h \ - global_typedefs.h pcb_bool.h unit.h vtroutestyle.h attrib.h \ + ../src_3rd/liblihata/genht/htip.h hid_cfg.h const.h board.h const.h \ + macro.h global_typedefs.h pcb_bool.h unit.h vtroutestyle.h attrib.h \ ../src_3rd/genvector/genvector_impl.h \ ../src_3rd/genvector/genvector_undef.h layer.h globalconst.h \ obj_all_list.h obj_arc_list.h obj_common.h \ @@ -2299,18 +2318,11 @@ obj_pad.h obj_pinvia_list.h obj_pinvia.h obj_text.h ht_element.h \ ../src_3rd/liblihata/genht/ht.h obj_poly_list.h obj_poly.h polyarea.h \ obj_text_list.h obj_rat_list.h obj_rat.h layer_grp.h library.h \ - rats_patch.h board.h font.h box.h math_helper.h move.h misc_util.h hid.h \ - error.h drc.h hid_cfg.h data.h crosshair.h vtonpoint.h hid.h buffer.h \ - ../src_plugins/lib_gtk_common/../hid_gtk/ghid-main-menu.h \ - ../src_plugins/lib_gtk_common/wt_layer_selector.h \ - ../src_plugins/lib_gtk_common/wt_route_style.h route_style.h conf_core.h \ - conf.h pcb-printf.h ../src_3rd/genvector/gds_char.h \ - ../src_3rd/liblihata/lihata.h ../src_3rd/genvector/vtp0.h list_conf.h \ - event.h compat_misc.h ../src_plugins/lib_gtk_common/../hid_gtk/colors.h \ - ../src_plugins/lib_gtk_common/../hid_gtk/hid_gtk_conf.h conf.h \ - ../src_plugins/lib_gtk_common/bu_cursor_pos.h \ - ../src_plugins/lib_gtk_common/ui_zoompan.h \ - ../src_plugins/lib_gtk_common/dlg_propedit.h + rats_patch.h board.h font.h box.h math_helper.h move.h misc_util.h \ + crosshair.h vtonpoint.h hid.h error.h drc.h \ + ../src_plugins/lib_gtk_common/in_keyboard.h \ + ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ + ../src_plugins/lib_gtk_common/bu_status_line.h ../src_plugins/lib_gtk_common/lib_gtk_common.o: \ ../src_plugins/lib_gtk_common/lib_gtk_common.c plugins.h ../src_plugins/lib_gtk_common/menu_lht.o: \ @@ -2318,13 +2330,15 @@ ../src_plugins/lib_gtk_common/ui_zoompan.o: \ ../src_plugins/lib_gtk_common/ui_zoompan.c ../config.h \ ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ - action_helper.h global_typedefs.h pcb_bool.h unit.h error.h conf_core.h \ - conf.h pcb-printf.h ../src_3rd/genvector/gds_char.h \ - ../src_3rd/genvector/genvector_impl.h \ - ../src_3rd/genvector/genvector_undef.h ../src_3rd/liblihata/lihata.h \ + ../src_plugins/lib_gtk_common/in_mouse.h hid_cfg_input.h \ ../src_3rd/liblihata/dom.h ../src_3rd/liblihata/lihata.h \ ../src_3rd/liblihata/parser.h ../src_3rd/liblihata/genht/htsp.h \ ../src_3rd/liblihata/genht/ht.h ../src_3rd/liblihata/genht/ht_inlines.h \ + ../src_3rd/liblihata/genht/htip.h hid_cfg.h action_helper.h \ + global_typedefs.h pcb_bool.h unit.h error.h conf_core.h conf.h \ + pcb-printf.h ../src_3rd/genvector/gds_char.h \ + ../src_3rd/genvector/genvector_impl.h \ + ../src_3rd/genvector/genvector_undef.h ../src_3rd/liblihata/lihata.h \ ../src_3rd/genvector/vtp0.h list_conf.h \ ../src_3rd/genlist/gentdlist_undef.h ../src_3rd/genlist/gentdlist_impl.h \ ../src_3rd/genlist/gendlist.h globalconst.h board.h const.h macro.h \ @@ -2438,10 +2452,10 @@ error.h drc.h layer.h obj_all_list.h obj_elem_list.h obj_elem.h \ ht_element.h ../src_3rd/liblihata/genht/ht.h obj_poly_list.h obj_poly.h \ polyarea.h obj_text_list.h obj_rat_list.h obj_rat.h layer_grp.h layer.h \ - ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h copy.h \ - data.h crosshair.h vtonpoint.h hid.h buffer.h draw.h move.h rotate.h \ - obj_all.h macro.h ../src_plugins/lib_gtk_common/in_mouse.h \ - hid_cfg_input.h ../src_3rd/liblihata/genht/htip.h hid_cfg.h + ../src_plugins/lib_gtk_common/ui_zoompan.h unit.h pcb_bool.h \ + ../src_plugins/lib_gtk_common/in_mouse.h hid_cfg_input.h \ + ../src_3rd/liblihata/genht/htip.h hid_cfg.h copy.h data.h crosshair.h \ + vtonpoint.h hid.h buffer.h draw.h move.h rotate.h obj_all.h macro.h ../src_plugins/lib_gtk_common/wt_route_style.o: \ ../src_plugins/lib_gtk_common/wt_route_style.c ../config.h conf_core.h \ conf.h global_typedefs.h pcb_bool.h unit.h pcb-printf.h \ Index: src_plugins/hid_gtk/gtkhid-main.c =================================================================== --- src_plugins/hid_gtk/gtkhid-main.c (revision 6738) +++ src_plugins/hid_gtk/gtkhid-main.c (revision 6739) @@ -74,6 +74,31 @@ ghid_port_ranges_changed(); } +void ghid_port_button_press_main(void) +{ + ghid_invalidate_all(); + ghid_window_set_name_label(PCB->Name); + ghid_set_status_line_label(); + if (!gport->view.panning) + g_idle_add(ghid_idle_cb, NULL); +} + +void ghid_port_button_release_main(void) +{ + pcb_adjust_attached_objects(); + ghid_invalidate_all(); + + ghid_window_set_name_label(PCB->Name); + ghid_set_status_line_label(); + g_idle_add(ghid_idle_cb, NULL); +} + +void ghid_mode_cursor_main(int mode) +{ + ghid_mode_cursor(&gport->mouse, mode); +} + + /* ------------------------------------------------------------ */ void ghid_calibrate(double xval, double yval) @@ -335,9 +360,9 @@ return; if (grabbed > 0) - ghid_point_cursor(); + ghid_point_cursor(&gport->mouse); else - ghid_mode_cursor(conf_core.editor.mode); + ghid_mode_cursor(&gport->mouse, conf_core.editor.mode); } /* ---------------------------------------------------------------------- */ @@ -622,7 +647,7 @@ /* ------------------------------------------------------------ */ static void ghid_Busy(void *user_data, int argc, pcb_event_arg_t argv[]) { - ghid_watch_cursor(); + ghid_watch_cursor(&gport->mouse); } static int Zoom(int argc, const char **argv, pcb_coord_t x, pcb_coord_t y) @@ -665,7 +690,7 @@ static void ghid_get_coords(const char *msg, pcb_coord_t * x, pcb_coord_t * y) { - pcb_gtk_get_coords(&gport->view, msg, x, y); + pcb_gtk_get_coords(&gport->mouse, &gport->view, msg, x, y); } int act_load(int argc, const char **argv, pcb_coord_t x, pcb_coord_t y) Index: src_plugins/hid_gtk/gui-output-events.c =================================================================== --- src_plugins/hid_gtk/gui-output-events.c (revision 6738) +++ src_plugins/hid_gtk/gui-output-events.c (revision 6739) @@ -117,7 +117,7 @@ { if (conf_core.editor.mode == PCB_MODE_NO) pcb_crosshair_set_mode(PCB_MODE_ARROW); - ghid_mode_cursor(conf_core.editor.mode); + ghid_mode_cursor(&gport->mouse, conf_core.editor.mode); if (ghidgui->settings_mode != conf_core.editor.mode) { ghid_mode_buttons_update(); } Index: src_plugins/hid_gtk/gui-top-window.c =================================================================== --- src_plugins/hid_gtk/gui-top-window.c (revision 6738) +++ src_plugins/hid_gtk/gui-top-window.c (revision 6739) @@ -714,7 +714,7 @@ static void do_set_mode(int mode) { pcb_crosshair_set_mode(mode); - ghid_mode_cursor(mode); + ghid_mode_cursor(&gport->mouse, mode); ghidgui->settings_mode = mode; } @@ -1062,6 +1062,9 @@ gport->drawing_area = gtk_drawing_area_new(); ghid_init_drawing_widget(gport->drawing_area, gport); + gport->mouse.drawing_area = gport->drawing_area; + gport->top_window = gport->top_window; + gtk_widget_add_events(gport->drawing_area, GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK | GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK @@ -1159,12 +1162,9 @@ void ghid_interface_input_signals_connect(void) { - button_press_handler = - g_signal_connect(G_OBJECT(gport->drawing_area), "button_press_event", G_CALLBACK(ghid_port_button_press_cb), NULL); + button_press_handler = g_signal_connect(G_OBJECT(gport->drawing_area), "button_press_event", G_CALLBACK(ghid_port_button_press_cb), &gport->mouse); + button_release_handler = g_signal_connect(G_OBJECT(gport->drawing_area), "button_release_event", G_CALLBACK(ghid_port_button_release_cb), &gport->mouse); - button_release_handler = - g_signal_connect(G_OBJECT(gport->drawing_area), "button_release_event", G_CALLBACK(ghid_port_button_release_cb), NULL); - key_press_handler = g_signal_connect(G_OBJECT(gport->drawing_area), "key_press_event", G_CALLBACK(ghid_port_key_press_cb), &ghid_port.view); Index: src_plugins/hid_gtk/gui.h =================================================================== --- src_plugins/hid_gtk/gui.h (revision 6738) +++ src_plugins/hid_gtk/gui.h (revision 6739) @@ -46,6 +46,7 @@ #include "../src_plugins/lib_gtk_common/bu_cursor_pos.h" #include "../src_plugins/lib_gtk_common/ui_zoompan.h" #include "../src_plugins/lib_gtk_common/dlg_propedit.h" +#include "../src_plugins/lib_gtk_common/in_mouse.h" /* Silk and rats lines are the two additional selectable to draw on. @@ -130,8 +131,7 @@ GdkColormap *colormap; - GdkCursor *X_cursor; /* used X cursor */ - GdkCursorType X_cursor_shape; /* and its shape */ + pcb_gtk_mouse_t mouse; pcb_gtk_view_t view; } GHidPort; Index: src_plugins/lib_gtk_common/in_mouse.c =================================================================== --- src_plugins/lib_gtk_common/in_mouse.c (revision 6738) +++ src_plugins/lib_gtk_common/in_mouse.c (revision 6739) @@ -28,17 +28,20 @@ /* This file was originally written by Bill Wilson for the PCB Gtk port; refactored for pcb-rnd by Tibor 'Igor2' Palinkas */ +#include "config.h" + #include +#include #include "in_mouse.h" -#include "in_keyboard.h" -#include +#include "const.h" +#include "board.h" +/*#include "action_helper.h"*/ +#include "crosshair.h" +#include "in_keyboard.h" #include "bu_status_line.h" -#warning TODO: remove this -#include "../hid_gtk/gui.h" - pcb_hid_cfg_mouse_t ghid_mouse; int ghid_wheel_zoom = 0; @@ -59,18 +62,19 @@ #define ICON_Y_HOT 8 -static GdkCursorType gport_set_cursor(GdkCursorType shape, GdkCursorType old_shape) +static GdkCursorType gport_set_cursor(pcb_gtk_mouse_t *ctx, GdkCursorType shape) { GdkWindow *window; GdkColor fg = { 0, 65535, 65535, 65535 }; /* white */ GdkColor bg = { 0, 0, 0, 0 }; /* black */ + GdkCursorType old_shape = ctx->X_cursor_shape; - if (gport->drawing_area == NULL) + if (ctx->drawing_area == NULL) return GDK_X_CURSOR; - window = gtk_widget_get_window(gport->drawing_area); + window = gtk_widget_get_window(ctx->drawing_area); - if (gport->X_cursor_shape == shape) + if (ctx->X_cursor_shape == shape) return shape; /* check if window exists to prevent from fatal errors */ @@ -77,113 +81,113 @@ if (window == NULL) return GDK_X_CURSOR; - gport->X_cursor_shape = shape; + ctx->X_cursor_shape = shape; if (shape > GDK_LAST_CURSOR) { if (shape == CUSTOM_CURSOR_CLOCKWISE) - gport->X_cursor = gdk_cursor_new_from_pixmap(XC_clock_source, XC_clock_mask, &fg, &bg, ICON_X_HOT, ICON_Y_HOT); + ctx->X_cursor = gdk_cursor_new_from_pixmap(XC_clock_source, XC_clock_mask, &fg, &bg, ICON_X_HOT, ICON_Y_HOT); else if (shape == CUSTOM_CURSOR_DRAG) - gport->X_cursor = gdk_cursor_new_from_pixmap(XC_hand_source, XC_hand_mask, &fg, &bg, ICON_X_HOT, ICON_Y_HOT); + ctx->X_cursor = gdk_cursor_new_from_pixmap(XC_hand_source, XC_hand_mask, &fg, &bg, ICON_X_HOT, ICON_Y_HOT); else if (shape == CUSTOM_CURSOR_LOCK) - gport->X_cursor = gdk_cursor_new_from_pixmap(XC_lock_source, XC_lock_mask, &fg, &bg, ICON_X_HOT, ICON_Y_HOT); + ctx->X_cursor = gdk_cursor_new_from_pixmap(XC_lock_source, XC_lock_mask, &fg, &bg, ICON_X_HOT, ICON_Y_HOT); } else - gport->X_cursor = gdk_cursor_new(shape); + ctx->X_cursor = gdk_cursor_new(shape); - gdk_window_set_cursor(window, gport->X_cursor); - gdk_cursor_unref(gport->X_cursor); + gdk_window_set_cursor(window, ctx->X_cursor); + gdk_cursor_unref(ctx->X_cursor); return old_shape; } -void ghid_point_cursor(void) +void ghid_point_cursor(pcb_gtk_mouse_t *ctx) { - old_cursor = gport_set_cursor(GDK_DRAPED_BOX, gport->X_cursor_shape); + old_cursor = gport_set_cursor(ctx, GDK_DRAPED_BOX); } -void ghid_hand_cursor(void) +void ghid_hand_cursor(pcb_gtk_mouse_t *ctx) { - old_cursor = gport_set_cursor(GDK_HAND2, gport->X_cursor_shape); + old_cursor = gport_set_cursor(ctx, GDK_HAND2); } -void ghid_watch_cursor(void) +void ghid_watch_cursor(pcb_gtk_mouse_t *ctx) { GdkCursorType tmp; - tmp = gport_set_cursor(GDK_WATCH, gport->X_cursor_shape); + tmp = gport_set_cursor(ctx, GDK_WATCH); if (tmp != GDK_WATCH) old_cursor = tmp; } -void ghid_mode_cursor(int mode) +void ghid_mode_cursor(pcb_gtk_mouse_t *ctx, int mode) { switch (mode) { case PCB_MODE_NO: - gport_set_cursor((GdkCursorType) CUSTOM_CURSOR_DRAG, gport->X_cursor_shape); + gport_set_cursor(ctx, (GdkCursorType) CUSTOM_CURSOR_DRAG); break; case PCB_MODE_VIA: - gport_set_cursor(GDK_ARROW, gport->X_cursor_shape); + gport_set_cursor(ctx, GDK_ARROW); break; case PCB_MODE_LINE: - gport_set_cursor(GDK_PENCIL, gport->X_cursor_shape); + gport_set_cursor(ctx, GDK_PENCIL); break; case PCB_MODE_ARC: - gport_set_cursor(GDK_QUESTION_ARROW, gport->X_cursor_shape); + gport_set_cursor(ctx, GDK_QUESTION_ARROW); break; case PCB_MODE_ARROW: - gport_set_cursor(GDK_LEFT_PTR, gport->X_cursor_shape); + gport_set_cursor(ctx, GDK_LEFT_PTR); break; case PCB_MODE_POLYGON: case PCB_MODE_POLYGON_HOLE: - gport_set_cursor(GDK_SB_UP_ARROW, gport->X_cursor_shape); + gport_set_cursor(ctx, GDK_SB_UP_ARROW); break; case PCB_MODE_PASTE_BUFFER: - gport_set_cursor(GDK_HAND1, gport->X_cursor_shape); + gport_set_cursor(ctx, GDK_HAND1); break; case PCB_MODE_TEXT: - gport_set_cursor(GDK_XTERM, gport->X_cursor_shape); + gport_set_cursor(ctx, GDK_XTERM); break; case PCB_MODE_RECTANGLE: - gport_set_cursor(GDK_UL_ANGLE, gport->X_cursor_shape); + gport_set_cursor(ctx, GDK_UL_ANGLE); break; case PCB_MODE_THERMAL: - gport_set_cursor(GDK_IRON_CROSS, gport->X_cursor_shape); + gport_set_cursor(ctx, GDK_IRON_CROSS); break; case PCB_MODE_REMOVE: - gport_set_cursor(GDK_PIRATE, gport->X_cursor_shape); + gport_set_cursor(ctx, GDK_PIRATE); break; case PCB_MODE_ROTATE: if (ghid_shift_is_pressed()) - gport_set_cursor((GdkCursorType) CUSTOM_CURSOR_CLOCKWISE, gport->X_cursor_shape); + gport_set_cursor(ctx, (GdkCursorType) CUSTOM_CURSOR_CLOCKWISE); else - gport_set_cursor(GDK_EXCHANGE, gport->X_cursor_shape); + gport_set_cursor(ctx, GDK_EXCHANGE); break; case PCB_MODE_COPY: case PCB_MODE_MOVE: - gport_set_cursor(GDK_CROSSHAIR, gport->X_cursor_shape); + gport_set_cursor(ctx, GDK_CROSSHAIR); break; case PCB_MODE_INSERT_POINT: - gport_set_cursor(GDK_DOTBOX, gport->X_cursor_shape); + gport_set_cursor(ctx, GDK_DOTBOX); break; case PCB_MODE_LOCK: - gport_set_cursor((GdkCursorType) CUSTOM_CURSOR_LOCK, gport->X_cursor_shape); + gport_set_cursor(ctx, (GdkCursorType) CUSTOM_CURSOR_LOCK); } } -void ghid_corner_cursor(void) +void ghid_corner_cursor(pcb_gtk_mouse_t *ctx) { GdkCursorType shape; @@ -191,13 +195,13 @@ shape = (pcb_crosshair.X >= pcb_crosshair.AttachedBox.Point1.X) ? GDK_UR_ANGLE : GDK_UL_ANGLE; else shape = (pcb_crosshair.X >= pcb_crosshair.AttachedBox.Point1.X) ? GDK_LR_ANGLE : GDK_LL_ANGLE; - if (gport->X_cursor_shape != shape) - gport_set_cursor(shape, gport->X_cursor_shape); + if (ctx->X_cursor_shape != shape) + gport_set_cursor(ctx, shape); } -void ghid_restore_cursor(void) +void ghid_restore_cursor(pcb_gtk_mouse_t *ctx) { - gport_set_cursor(old_cursor, gport->X_cursor_shape); + gport_set_cursor(ctx, old_cursor); } /* =============================================================== */ @@ -244,7 +248,7 @@ area, quit the loop so the top level loop can continue and use the the mouse pointer coordinates at the time of the mouse button event. */ -static gboolean run_get_location_loop(const gchar * message) +static gboolean run_get_location_loop(pcb_gtk_mouse_t *ctx, const gchar * message) { static int getting_loc = 0; GMainLoop *loop; @@ -268,7 +272,7 @@ pcb_crosshair.AttachedObject.State = PCB_CH_STATE_FIRST; pcb_crosshair.AttachedLine.State = PCB_CH_STATE_FIRST; pcb_crosshair.AttachedBox.State = PCB_CH_STATE_FIRST; - ghid_hand_cursor(); + ghid_hand_cursor(ctx); pcb_notify_crosshair_change(pcb_true); /* Stop the top level GMainLoop from getting user input from keyboard @@ -281,8 +285,8 @@ got_location = TRUE; /* Will be unset by hitting most keys */ button_handler = - g_signal_connect(G_OBJECT(gport->drawing_area), "button_press_event", G_CALLBACK(loop_button_press_cb), &loop); - key_handler = g_signal_connect(G_OBJECT(gport->top_window), "key_press_event", G_CALLBACK(loop_key_press_cb), &loop); + g_signal_connect(G_OBJECT(ctx->drawing_area), "button_press_event", G_CALLBACK(loop_button_press_cb), &loop); + key_handler = g_signal_connect(G_OBJECT(ctx->top_window), "key_press_event", G_CALLBACK(loop_key_press_cb), &loop); loop = g_main_loop_new(NULL, FALSE); g_main_loop_run(loop); @@ -289,8 +293,8 @@ g_main_loop_unref(loop); - g_signal_handler_disconnect(gport->drawing_area, button_handler); - g_signal_handler_disconnect(gport->top_window, key_handler); + g_signal_handler_disconnect(ctx->drawing_area, button_handler); + g_signal_handler_disconnect(ctx->top_window, key_handler); ghid_interface_input_signals_connect(); /* return to normal */ ghid_interface_set_sensitive(TRUE); @@ -300,7 +304,7 @@ pcb_crosshair.AttachedLine.State = oldLineState; pcb_crosshair.AttachedBox.State = oldBoxState; pcb_notify_crosshair_change(pcb_true); - ghid_restore_cursor(); + ghid_restore_cursor(ctx); ghid_set_status_line_label(); @@ -308,9 +312,9 @@ return got_location; } -void ghid_get_user_xy(const char *msg) +void ghid_get_user_xy(pcb_gtk_mouse_t *ctx, const char *msg) { - run_get_location_loop(msg); + run_get_location_loop(ctx, msg); } /* Mouse scroll wheel events */ @@ -348,6 +352,7 @@ ModifierKeysState mk; GdkModifierType state; GdkModifierType mask; +/* pcb_gtk_mouse_t *ctx = gdata;*/ /* Reject double and triple click events */ if (ev->type != GDK_BUTTON_PRESS) @@ -364,19 +369,16 @@ hid_cfg_mouse_action(&ghid_mouse, ghid_mouse_button(ev->button) | mk); - ghid_invalidate_all(); - ghid_window_set_name_label(PCB->Name); - ghid_set_status_line_label(); - if (!gport->view.panning) - g_idle_add(ghid_idle_cb, NULL); + ghid_port_button_press_main(); + return TRUE; } - gboolean ghid_port_button_release_cb(GtkWidget *drawing_area, GdkEventButton *ev, gpointer data) { ModifierKeysState mk; GdkModifierType state; +/* pcb_gtk_mouse_t *ctx = data;*/ ghid_note_event_location(ev); state = (GdkModifierType) (ev->state); @@ -384,12 +386,7 @@ hid_cfg_mouse_action(&ghid_mouse, ghid_mouse_button(ev->button) | mk | PCB_M_Release); - pcb_adjust_attached_objects(); - ghid_invalidate_all(); - - ghid_window_set_name_label(PCB->Name); - ghid_set_status_line_label(); - g_idle_add(ghid_idle_cb, NULL); + ghid_port_button_release_main(); return TRUE; } Index: src_plugins/lib_gtk_common/in_mouse.h =================================================================== --- src_plugins/lib_gtk_common/in_mouse.h (revision 6738) +++ src_plugins/lib_gtk_common/in_mouse.h (revision 6739) @@ -1,23 +1,32 @@ +#ifndef PCB_GTK_IN_MOUSE_H +#define PCB_GTK_IN_MOUSE_H + #include "hid_cfg_input.h" #include #include +typedef struct pcb_gtk_mouse_s { + GtkWidget *drawing_area, *top_window; + GdkCursor *X_cursor; /* used X cursor */ + GdkCursorType X_cursor_shape; /* and its shape */ +} pcb_gtk_mouse_t; + extern pcb_hid_cfg_mouse_t ghid_mouse; extern int ghid_wheel_zoom; pcb_hid_cfg_mod_t ghid_mouse_button(int ev_button); -void ghid_hand_cursor(void); -void ghid_point_cursor(void); +void ghid_hand_cursor(pcb_gtk_mouse_t *ctx); +void ghid_point_cursor(pcb_gtk_mouse_t *ctx); /** Changes the cursor appearance to signifies a wait state */ -void ghid_watch_cursor(void); +void ghid_watch_cursor(pcb_gtk_mouse_t *ctx); /** Changes the cursor appearance according to @mode */ -void ghid_mode_cursor(gint mode); -void ghid_corner_cursor(void); -void ghid_restore_cursor(void); +void ghid_mode_cursor(pcb_gtk_mouse_t *ctx, gint mode); +void ghid_corner_cursor(pcb_gtk_mouse_t *ctx); +void ghid_restore_cursor(pcb_gtk_mouse_t *ctx); -void ghid_get_user_xy(const char *msg); +void ghid_get_user_xy(pcb_gtk_mouse_t *ctx, const char *msg); gint ghid_port_window_mouse_scroll_cb(GtkWidget *widget, GdkEventScroll *ev, void *out); @@ -24,5 +33,13 @@ gboolean ghid_port_button_press_cb(GtkWidget * drawing_area, GdkEventButton * ev, gpointer data); gboolean ghid_port_button_release_cb(GtkWidget * drawing_area, GdkEventButton * ev, gpointer data); -/* Temporary call to hid_gtk */ +/* Temporary calls to hid_gtk */ extern gboolean ghid_idle_cb(gpointer data); +extern int ghid_shift_is_pressed(); +extern void ghid_interface_input_signals_disconnect(void); +extern void ghid_interface_input_signals_connect(void); +extern void ghid_interface_set_sensitive(gboolean sensitive); +extern void ghid_port_button_press_main(void); +extern void ghid_port_button_release_main(void); + +#endif Index: src_plugins/lib_gtk_common/ui_zoompan.c =================================================================== --- src_plugins/lib_gtk_common/ui_zoompan.c (revision 6738) +++ src_plugins/lib_gtk_common/ui_zoompan.c (revision 6739) @@ -40,7 +40,6 @@ void ghid_pan_common(void); void ghid_port_ranges_scale(void); void ghid_invalidate_all(); -void ghid_get_user_xy(const gchar *msg); double pcb_gtk_clamp_zoom(const pcb_gtk_view_t *vw, double coord_per_px) { @@ -483,10 +482,10 @@ } -void pcb_gtk_get_coords(pcb_gtk_view_t *vw, const char *msg, pcb_coord_t * x, pcb_coord_t * y) +void pcb_gtk_get_coords(pcb_gtk_mouse_t *mouse, pcb_gtk_view_t *vw, const char *msg, pcb_coord_t * x, pcb_coord_t * y) { if (!vw->has_entered && msg) - ghid_get_user_xy(msg); + ghid_get_user_xy(mouse, msg); if (vw->has_entered) { *x = vw->pcb_x; *y = vw->pcb_y; Index: src_plugins/lib_gtk_common/ui_zoompan.h =================================================================== --- src_plugins/lib_gtk_common/ui_zoompan.h (revision 6738) +++ src_plugins/lib_gtk_common/ui_zoompan.h (revision 6739) @@ -28,6 +28,7 @@ #include #include "unit.h" #include "pcb_bool.h" +#include "in_mouse.h" /* Go from from the grid units in use (millimeters or mils) to PCB units | and back again. @@ -100,6 +101,6 @@ extern const char pcb_acth_pan[]; int pcb_gtk_act_pan(pcb_gtk_view_t *vw, int argc, const char **argv, pcb_coord_t x, pcb_coord_t y); -void pcb_gtk_get_coords(pcb_gtk_view_t *vw, const char *msg, pcb_coord_t * x, pcb_coord_t * y); +void pcb_gtk_get_coords(pcb_gtk_mouse_t *mouse, pcb_gtk_view_t *vw, const char *msg, pcb_coord_t * x, pcb_coord_t * y); #endif Index: src_plugins/lib_gtk_common/util_timer.c =================================================================== --- src_plugins/lib_gtk_common/util_timer.c (revision 6738) +++ src_plugins/lib_gtk_common/util_timer.c (revision 6739) @@ -38,7 +38,7 @@ static gboolean ghid_timer(GuiTimer * timer) { (*timer->func) (timer->user_data); - ghid_mode_cursor(conf_core.editor.mode); + ghid_mode_cursor_main(conf_core.editor.mode); return FALSE; /* Turns timer off */ } Index: src_plugins/lib_gtk_common/util_timer.h =================================================================== --- src_plugins/lib_gtk_common/util_timer.h (revision 6738) +++ src_plugins/lib_gtk_common/util_timer.h (revision 6739) @@ -2,3 +2,6 @@ pcb_hidval_t ghid_add_timer(void (*func) (pcb_hidval_t user_data), unsigned long milliseconds, pcb_hidval_t user_data); void ghid_stop_timer(pcb_hidval_t timer); + +/* Temporary call backs to hid_gtk: */ +extern void ghid_mode_cursor_main(int mode); Index: src_plugins/lib_gtk_common/util_watch.c =================================================================== --- src_plugins/lib_gtk_common/util_watch.c (revision 6738) +++ src_plugins/lib_gtk_common/util_watch.c (revision 6739) @@ -53,8 +53,9 @@ x.ptr = (void *) watch; watch->func(x, watch->fd, pcb_condition, watch->user_data); - ghid_mode_cursor(conf_core.editor.mode); + ghid_mode_cursor_main(conf_core.editor.mode); + return TRUE; /* Leave watch on */ } Index: src_plugins/lib_gtk_common/util_watch.h =================================================================== --- src_plugins/lib_gtk_common/util_watch.h (revision 6738) +++ src_plugins/lib_gtk_common/util_watch.h (revision 6739) @@ -7,3 +7,7 @@ void ghid_unwatch_file(pcb_hidval_t data); +/* Temporary call backs to hid_gtk: */ +extern void ghid_mode_cursor_main(int mode); + +