diff --git a/src/main_window.cc b/src/main_window.cc index 91df1da..1c9486d 100644 --- a/src/main_window.cc +++ b/src/main_window.cc @@ -35,7 +35,8 @@ // } log_define("vido.main_window"); - +int x=-1, y=-1; +int ctrl_state; main_window::main_window() { sigc::connection press_id; @@ -45,19 +46,15 @@ main_window::main_window() void main_window::connect_all() { -// (*this).add_events( Gdk::BUTTON_PRESS_MASK ) ; + (*this).add_events( Gdk::ALL_EVENTS_MASK ) ; log_debug("connecting all"); // (*this).press_id = signal_key_press_event().connect(sigc::mem_fun(*this,&main_window::on_my_key_press_event)); // (*this).release_id = signal_key_release_event().connect(sigc::mem_fun(*this,&main_window::on_my_key_release_event)); // (*this).press_id = - - (*this).add_events (Gdk::ALL_EVENTS_MASK); - (*this).press_id = (*this).signal_key_press_event().connect_notify(sigc::mem_fun(*this,&main_window::on_notify_key_press_event)); (*this).release_id = (*this).signal_key_release_event().connect_notify(sigc::mem_fun(*this,&main_window::on_notify_key_release_event)); -// (*this).motion_id = (*this).signal_event().connect_notify(sigc::mem_fun(*this,&main_window::on_notify_motion_notify_event)); + (*this).motion_id = (*this).signal_event().connect_notify(sigc::mem_fun(*this,&main_window::motion_notify_event)); log_debug((*this).press_id << " " << (*this).release_id); - log_debug("event mask " << (*this).get_events()); } void main_window::disconnect_all() @@ -68,7 +65,7 @@ void main_window::disconnect_all() log_debug((*this).press_id << " " << (*this).release_id); } -void main_window::on_notify_motion_notify_event ( GdkEvent *event) +void main_window::motion_notify_event ( GdkEvent *event) { // gdouble x, y; // gdouble pressure; @@ -95,11 +92,11 @@ void main_window::on_notify_motion_notify_event ( GdkEvent *event) void main_window::move_cursor(int direction){ - int x=0, y=0, xadd=0, yadd=0; + int xadd=0, yadd=0; Glib::RefPtr display; - display = display->get_default(); - Glib::RefPtr screen = display->get_default_screen(); -// screen = display->get_default_screen(); +// display = display->get_default(); + Glib::RefPtr screen = this->get_screen(); + display = screen->get_display(); log_debug("display: " << display); log_debug("screen: " << screen); /* check for up/down/left/right arrow key press */ @@ -161,27 +158,44 @@ void main_window::move_cursor(int direction){ // log_debug("unknown direction 6"); // Gdk::ModifierType mask; - display->get_pointer(x, y, mask); -// log_debug("pointer x: " << x << "pointer y: " << display->pointer_hooks); +// if ((x==-1) && (y==-1)){ + display->get_pointer(x, y, mask); +// } + + log_debug("pointer x: " << x << "pointer y: " << y ); // display->warp_pointer( screen, x, y); -// Gdk::Event event(); - -// Gdk::Event event(gdk_event_new(GDK_MOTION_NOTIFY),true); -// + GdkEvent *event1 = display->peek_event(); + if (event1 != NULL){ + log_debug("event type: " << event1->type); + }else{ + log_debug("no event"); + } + + // // get_window_and_coordinates(event->button.window, event->button.x, event->button.y, event->button.x_root, event->button.y_root); -// event.send_event = TRUE; -// event.time = GDK_CURRENT_TIME; -// event.axes = 0; -// event.state = 0; -// event.motion.x = x; -// event.motion.y = y; +// GdkEventType type; +// GdkWindow *window; +// gint8 send_event; +// guint32 time; +// gdouble x; +// gdouble y; +// gdouble *axes; +// guint state; +// gint16 is_hint; +// GdkDevice *device; +// gdouble x_root, y_root; + +// event->type = Gdk::MOTION_NOTIFY; + + +// event.y = y; // /* set new cusor position */ + + x += xadd; y += yadd; -// event.motion.x_root = x; -// event.motion.y_root = y; // // event->button.button = Button; // // event->button.device = gdk_device_get_core_pointer(); // @@ -189,20 +203,33 @@ void main_window::move_cursor(int direction){ // event.put(); // handle_pending_events(); // gdk_event_free(event); - Glib::RefPtr pointer = display->get_core_pointer(); - log_debug("type cursor: " << pointer->get_source()); +// Glib::RefPtr pointer = display->get_core_pointer(); +// log_debug("type cursor: " << pointer->type); log_debug("pointer xadd: " << xadd << "pointer yadd: " << yadd ); if ((screen != 0) && (display!= 0)){ display->warp_pointer( screen, x, y); +// GdkEvent *event = gdk_event_new(GDK_MOTION_NOTIFY); +// Glib::RefPtr window = display->get_window_at_pointer(x, y); +// Glib::RefPtr pointer = display->get_core_pointer (); +// event->motion.window = window->gobj(); +// event->motion.send_event = 1; +// event->motion.time = GDK_CURRENT_TIME; +// event->motion.x = xadd; +// event->motion.y = yadd; +// event->motion.axes = 0; +// event->motion.state = 0; +// event->motion.is_hint = 0; +// event->motion.device = pointer->gobj(); +// event->motion.x_root = xadd; +// event->motion.y_root = yadd; +// display->put_event(event); // this->signal_motion_notify_event(); -// g_signal_emit (G_OBJECT(display->gobj()), GDK_MOTION_NOTIFY, NULL, x= x, y = y); - } } bool main_window::actions(int key) { -// log_debug("in actions" << (*this).press_id << " " << (*this).release_id); + log_debug("in actions " << (*this).press_id << " " << (*this).release_id << "control state " << ctrl_state); static int key_b = 98; static int key_f = 102; static int key_h = 104; @@ -228,7 +255,7 @@ bool main_window::actions(int key) } else if(key == key_r) { -// log_debug("random"); + log_debug("random"); show_random(); } else if(key == key_s) @@ -272,22 +299,24 @@ bool main_window::actions(int key) void main_window::on_notify_key_press_event(GdkEventKey *Key) { - if (Key->keyval == gdk_keyval_from_name("Control_R")) + if (Key->keyval == 65508) { + log_debug("setting ctrl state 1"); ctrl_state = 1; } else { - actions(Key->keyval); + (*this).actions(Key->keyval); } log_debug("Key Presssed is " << Key->keyval); } void main_window::on_notify_key_release_event(GdkEventKey *Key) { - if (Key->keyval == gdk_keyval_from_name("Control_R")) + if (Key->keyval == 65508) { - ctrl_state = 0; + log_debug("setting ctrl state 0"); + ctrl_state = 0; } } diff --git a/src/main_window.hh b/src/main_window.hh index 06e4786..4be6c5a 100644 --- a/src/main_window.hh +++ b/src/main_window.hh @@ -29,15 +29,18 @@ class main_window : public Gtk::Window main_window(); sigc::connection press_id; sigc::connection release_id; + sigc::connection motion_id; void connect_all(); void disconnect_all(); private: bool actions(int); int ctrl_state; + void move_cursor(int direction); // bool on_my_key_press_event(GdkEventKey *event); void on_notify_key_press_event(GdkEventKey *event); void on_notify_key_release_event(GdkEventKey *event); + void motion_notify_event(GdkEvent *event); // bool on_my_key_release_event(GdkEventKey *event); bool quit(); }; diff --git a/src/vido.cc b/src/vido.cc index d3177a5..d8b087b 100644 --- a/src/vido.cc +++ b/src/vido.cc @@ -438,6 +438,11 @@ bool on_link_clicked(GtkHTML *html, const gchar *url) return true; } +void motion( GdkEventMotion *event) +{ + log_debug("motion"); +} + bool scrolled(GtkHTML *cb_html, GtkOrientation orientation, GtkScrollType scroll_type, gfloat position) { log_debug("scrolled"); @@ -461,6 +466,7 @@ int main(int argc, char **argv) Gtk::Main kit(argc, argv); main_window window; + window.add_modal_grab(); window.set_title("Vido"); // window.set_border_width(0); window.set_default_size(220, 240); @@ -473,8 +479,12 @@ int main(int argc, char **argv) g_signal_connect( G_OBJECT( html_wg ), "scroll", G_CALLBACK( scrolled ), NULL ); gtk_html_set_caret_mode(GTK_HTML(html_wg),false); // gtk_html_adjust_cursor_position(GTK_HTML(html_wg)); + gtk_widget_set_events(html_wg, 0x3FFFFE); + gtk_signal_connect (GTK_OBJECT (html_wg), "motion_notify_event", + GTK_SIGNAL_FUNC (motion), NULL); Gtk::ScrolledWindow scrolled_window; scrolled_window2 = &scrolled_window; + scrolled_window.set_resize_mode(Gtk::RESIZE_PARENT); scrolled_window.add(*html); scrolled_window.set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);