예제 #1
0
void tree_config_cursor_changed(GtkTreeView *tree_view, gpointer user_data)
{
	int rawcode;
	block_update = 1;
	
	GdkCursor* cursor;
	GdkWindow *gdkwindow;
	
	gdkwindow = gtk_widget_get_parent_window(GET_WIDGET(TREEVIEW_BUTTONS_CONFIG));
	cursor = gdk_cursor_new(GDK_WATCH);
	gdk_window_set_cursor(gdkwindow, cursor);
	gdk_cursor_destroy(cursor);
	
	//g_print("getting selected rawcode\n");
	rawcode = tree_buttons_get_selected_button_rawcode();
	if (config_edit_rawcode(rawcode) == 0)
		goto done;
		
	//g_print("refreshing properties\n");
	config_refresh_button_properties();
	
done:
	cursor = gdk_cursor_new(GDK_LEFT_PTR);
	gdk_window_set_cursor(gdkwindow, cursor);
	gdk_cursor_destroy(cursor);
	block_update = 0;
}
예제 #2
0
파일: viewer.c 프로젝트: testfarm/testfarm
void viewer_done(viewer_t *viewer)
{
  if ( viewer == NULL )
    return;

  /* Close FAM connection */
  viewer_fam_close(viewer);

  /* Close search history */
  search_history_save(viewer);
  search_history_done(viewer);

  free(viewer->title);

  if ( viewer->filename != NULL )
    free(viewer->filename);

  list_done(viewer->list);

  if ( viewer->filew != NULL )
    gtk_widget_destroy(viewer->filew);

  gdk_cursor_destroy(viewer->cursor_watch);
  gtk_widget_destroy(viewer->search_combo);
  gtk_widget_destroy(viewer->window);

  free(viewer);
}
예제 #3
0
파일: gdk.c 프로젝트: amery/clip-angelo
static int
gdk_object_cursor_destructor(ClipMachine * ClipMachineMemory, C_object * ccur)
{
   if (ccur && GDK_IS_CURSOR(ccur) && ccur->ref_count >= 0)
      gdk_cursor_destroy(GDK_CURSOR(ccur->object));
   return 0;
}
예제 #4
0
파일: gtk.c 프로젝트: Airr/Claro
void cgraphics_widget_set_cursor( widget_t *widget, int cursor )
{
	GdkCursor *gcursor;
	
	gcursor = gdk_cursor_new( cgraphics_cursors[cursor] );
	gdk_window_set_cursor( GDK_WINDOW(GTK_WIDGET(widget->native)->window), gcursor );
	gdk_cursor_destroy( gcursor );
}
예제 #5
0
파일: gui.cpp 프로젝트: AeroCano/JdeRobot
	bool Gui::on_press_teleopAreaRtt(GdkEvent * event) {
		float event_yaw = event->button.x;
		float event_pitch = event->button.y;
		float k = 0.01;
		float p = -1;
		float yaw_normalized, pitch_normalized;
		static gboolean dragging = FALSE;

		switch (event->type) {
		    case GDK_BUTTON_PRESS:
		        if (event->button.button == 3) {
		            this->previous_event_yaw = event->button.x;
		            this->previous_event_pitch = event->button.y;
		        }
		        if (event->button.button == 1) {
		            GdkCursor *cursor;
		            cursor = gdk_cursor_new(GDK_FLEUR);
		            gdk_cursor_destroy(cursor);

		            dragging = true;
		        }
		        break;

		    case GDK_MOTION_NOTIFY:
		        if (dragging && (event->motion.state & GDK_BUTTON1_MASK)) {
		            this->previous_event_yaw = event_yaw;
		            this->previous_event_pitch = event_pitch;
		            this->teleoperateRtt();
		        }
		        break;

		    case GDK_BUTTON_RELEASE:
		        dragging = FALSE;
		        break;

		    default:
		        break;
		}
		yaw_normalized = pi * (k * previous_event_yaw + p)*(-1);
		pitch_normalized = pi  * (k * previous_event_pitch + p);

		if (yaw_normalized > prev_yaw)
			sharer->changePose3dRotation(-1., 0., 0.);
		else if (yaw_normalized < prev_yaw)
			sharer->changePose3dRotation(1., 0., 0.);

		if (pitch_normalized > prev_pitch)
			sharer->changePose3dRotation(0., -1., 0.);
		else if (pitch_normalized < prev_pitch)
			sharer->changePose3dRotation(0., 1., 0.);
		this->prev_yaw = yaw_normalized;
		this->prev_pitch = pitch_normalized;
		//Set to API
		//pthread_mutex_lock(&api->controlGui);
		//api->setYawValue(yaw_normalized);
		//api->setPitchValue(pitch_normalized);
		//pthread_mutex_unlock(&api->controlGui);
	}
예제 #6
0
static void
gtk_combo_button_init (GtkComboButton * combo_button)
{
  GtkWidget *event_box;
  GdkCursor *cursor;
  GtkWidget *widget;
  GtkWidget *arrow;

  widget=GTK_WIDGET(combo_button);

  GTK_BOX(widget)->homogeneous = FALSE;

  combo_button->button = gtk_button_new ();
  combo_button->arrow = gtk_toggle_button_new ();

  arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_IN);
  gtk_widget_show (arrow);
  gtk_container_add (GTK_CONTAINER (combo_button->arrow), arrow);

  gtk_box_pack_start (GTK_BOX (combo_button), combo_button->button, TRUE, TRUE, 0);
  gtk_box_pack_end (GTK_BOX (combo_button), combo_button->arrow, FALSE, FALSE, 0);

  gtk_widget_show (combo_button->button);
  gtk_widget_show (combo_button->arrow);

  gtk_signal_connect (GTK_OBJECT (combo_button->arrow), "toggled",
		      (GtkSignalFunc) gtk_combo_button_arrow_press, combo_button);

                       
  combo_button->popwin = gtk_window_new (GTK_WINDOW_POPUP);
  gtk_widget_ref (combo_button->popwin);
  gtk_window_set_resizable (GTK_WINDOW (combo_button->popwin), FALSE);
  gtk_window_set_policy (GTK_WINDOW (combo_button->popwin), 1, 1, 0);
  gtk_widget_set_events (combo_button->popwin, GDK_KEY_PRESS_MASK);
 
  event_box = gtk_event_box_new ();
  gtk_container_add (GTK_CONTAINER (combo_button->popwin), event_box);
  gtk_widget_show (event_box);

  gtk_widget_realize (event_box);
  cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW);
  gdk_window_set_cursor (event_box->window, cursor);
  gdk_cursor_destroy (cursor);

  combo_button->frame = gtk_frame_new (NULL);
  gtk_container_add (GTK_CONTAINER (event_box), combo_button->frame);
  gtk_frame_set_shadow_type (GTK_FRAME (combo_button->frame), GTK_SHADOW_OUT);
  gtk_widget_show (combo_button->frame);

  gtk_signal_connect (GTK_OBJECT (combo_button->popwin), "button_press_event",
		      GTK_SIGNAL_FUNC (gtk_combo_button_button_press), combo_button);
  

}
예제 #7
0
void change_cursor(GdkCursorType C)
{

    GdkCursor *cursor;
    GdkWindow *w;
    cursor = gdk_cursor_new(C);
    w = (GdkWindow *) glade_xml_get_widget(xml, "frmMain");
    gdk_window_set_cursor((GdkWindow *) view->drawing_area->window,
			  cursor);
    gdk_cursor_destroy(cursor);
}
예제 #8
0
파일: gui.cpp 프로젝트: feiting/jderobot
    bool Gui::on_button_press_canvas_teleoperate_cameras(GdkEvent * event) {
        float event_x = event->button.x;
        float event_y = event->button.y;
        float k = 0.01;
        float p = -1;
        float v_normalized, w_normalized;
        static gboolean dragging = FALSE;
        float tilt, pan;

        switch (event->type) {
            case GDK_BUTTON_PRESS:
                if (event->button.button == 3) {
                    this->previous_event_x_camera = event->button.x;
                    this->previous_event_y_camera = event->button.y;
                }
                if (event->button.button == 1) {
                    GdkCursor *cursor;
                    cursor = gdk_cursor_new(GDK_FLEUR);
                    gdk_cursor_destroy(cursor);

                    dragging = true;
                }
                break;

            case GDK_MOTION_NOTIFY:
                if (dragging && (event->motion.state & GDK_BUTTON1_MASK)) {
                    this->previous_event_x_camera = event_x;
                    this->previous_event_y_camera = event_y;
                    this->teleoperateCameras();
                }
                break;

            case GDK_BUTTON_RELEASE:
                dragging = FALSE;
                break;


            default:
                break;

        }

        widget2Pose3Dmotors(this->previous_event_x_camera, this->previous_event_y_camera, &tilt, &pan);

        v_normalized = 400 * (k * previous_event_y_camera + p)*(-1);
        w_normalized = 20 * (k * previous_event_x_camera + p)*(1);
        api->v_normalized = tilt;
        api->w_normalized = pan;



    }
예제 #9
0
파일: gui.cpp 프로젝트: feiting/jderobot
    bool Gui::on_button_press_canvas_teleoperate(GdkEvent * event) {
        float event_x = event->button.x;
        float event_y = event->button.y;
        float k = 0.01;
        float p = -1;
        float v_normalized, w_normalized;
        static gboolean dragging = FALSE;

        switch (event->type) {
            case GDK_BUTTON_PRESS:
                if (event->button.button == 3) {
                    this->previous_event_x = event->button.x;
                    this->previous_event_y = event->button.y;
                }
                if (event->button.button == 1) {
                    GdkCursor *cursor;
                    cursor = gdk_cursor_new(GDK_FLEUR);
                    gdk_cursor_destroy(cursor);

                    dragging = true;
                }
                break;

            case GDK_MOTION_NOTIFY:
                if (dragging && (event->motion.state & GDK_BUTTON1_MASK)) {
                    this->previous_event_x = event_x;
                    this->previous_event_y = event_y;
                    this->teleoperate();
                }
                break;

            case GDK_BUTTON_RELEASE:
                dragging = FALSE;
                break;


            default:
                break;

        }
        v_normalized = 400 * (k * previous_event_y + p)*(-1);
        w_normalized = 20 * (k * previous_event_x + p)*(-1);

        api->setMotorV(v_normalized);
        if (w_normalized < 0.2 && w_normalized>-0.2)
            api->setMotorW(0.0);
        else
            api->setMotorW(w_normalized);



    }
예제 #10
0
파일: gvtool.c 프로젝트: Onjrew/OpenEV
void
gv_tool_set_cursor(GvTool *tool, gint cursor_type)
{
    if (tool->cursor != NULL)
        gdk_cursor_destroy(tool->cursor);

    tool->cursor = gdk_cursor_new(cursor_type);

    if ((tool->view != NULL) && (GTK_WIDGET_REALIZED(GTK_WIDGET(tool->view))))
    {
	gdk_window_set_cursor(GTK_WIDGET(tool->view)->window, tool->cursor);
    }

}
예제 #11
0
파일: dirtree.c 프로젝트: gentoo/pornview
static void
dirtree_set_cursor (GtkWidget * widget, GdkCursorType cursor_type)
{
    GdkCursor *cursor = NULL;

    if (!widget || !widget->window)
	return;

    if (cursor_type > -1)
	cursor = gdk_cursor_new (cursor_type);

    gdk_window_set_cursor (widget->window, cursor);

    if (cursor)
	gdk_cursor_destroy (cursor);

    gdk_flush ();
}
예제 #12
0
static void
gtk_hex_entry_unrealize (GtkWidget *widget)
{
	GtkHexEntry *hex_entry;

	g_return_if_fail (widget != NULL);
	g_return_if_fail (GTK_IS_HEX_ENTRY (widget));

	hex_entry = GTK_HEX_ENTRY (widget);

	gdk_gc_destroy (hex_entry->gc);
	hex_entry->gc = NULL;

	gdk_cursor_destroy (hex_entry->cursor);
	hex_entry->cursor = NULL;

	if (GTK_WIDGET_CLASS (parent_class)->unrealize)
	(* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
}
예제 #13
0
void mDotSlot(GtkWidget * widget, gpointer user_data)
{
    GdkCursor *cursor;
    GdkWindow *w;
    Dlg = (GtkMessageDialog *) gtk_message_dialog_new(NULL,
						      GTK_DIALOG_MODAL,
						      GTK_MESSAGE_QUESTION,
						      GTK_BUTTONS_YES_NO,
						      "This will change the graph layout\n all your position changes will be lost\n Are you sure?");

    respond = gtk_dialog_run((GtkDialog *) Dlg);
    if (respond == GTK_RESPONSE_YES)
	do_graph_layout(view->g[view->activeGraph], GVK_DOT, 0);
    gtk_object_destroy((GtkObject *) Dlg);

    cursor = gdk_cursor_new(GDK_HAND2);
    w = (GdkWindow *) glade_xml_get_widget(xml, "frmMain");
    gdk_window_set_cursor((GdkWindow *) view->drawing_area->window,
			  cursor);
    gdk_cursor_destroy(cursor);
}
예제 #14
0
GTKVideo::~GTKVideo() {
  gst_pipeline_.reset();
  g_idle_remove_by_data(this);
  if (nullptr != title_)
    g_free(title_);
  // destroy child widgets too
  if (main_window_ != nullptr && GTK_IS_WIDGET(main_window_)) {
    std::unique_lock<std::mutex> lock(window_destruction_mutex_);
    // g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
    //     destroy_window,
    //     this,
    //     window_destroyed);
    gtk_idle_add(destroy_window, this);
    window_destruction_cond_.wait(lock);
  }
  if (blank_cursor_ != nullptr)
    gdk_cursor_destroy(blank_cursor_);
  // instances_counter_ --;
  // if (instances_counter_ == 0)
  //   {
  // g_debug ("GTKVideo::~GTKVideo invoking gtk_main_quit");
  // gtk_main_quit ();
  //   }
}
예제 #15
0
파일: gui.cpp 프로젝트: AeroCano/JdeRobot
	bool Gui::on_press_teleopAreaTrl(GdkEvent * event) {
		float event_x = event->button.x;
		float event_y = event->button.y;
		float k = 0.01;
		float p = -1;
		float x_normalized, y_normalized;
		static gboolean dragging = FALSE;

		switch (event->type) {
		    case GDK_BUTTON_PRESS:
		        if (event->button.button == 3) {
		            this->previous_event_x = event->button.x;
		            this->previous_event_y = event->button.y;
		        }
		        if (event->button.button == 1) {
		            GdkCursor *cursor;
		            cursor = gdk_cursor_new(GDK_FLEUR);
		            gdk_cursor_destroy(cursor);

		            dragging = true;
		        }
		        break;

		    case GDK_MOTION_NOTIFY:
		        if (dragging && (event->motion.state & GDK_BUTTON1_MASK)) {
		            this->previous_event_x = event_x;
		            this->previous_event_y = event_y;
		            this->teleoperateTrl();
		        }
		        break;

		    case GDK_BUTTON_RELEASE:
		        dragging = FALSE;
		        break;

		    default:
		        break;
		}
		x_normalized = 20 * (k * previous_event_y + p)*(-1);
       		y_normalized = 20 * (k * previous_event_x + p)*(-1);

		sharer->setSpeedX(x_normalized/100.0);
		sharer->setSpeedY(y_normalized/100.0);


		/*if (x_normalized > prev_x)
			sharer->changePose3dTranslation(1., 0., 0.);
		else if (x_normalized < prev_x)
			sharer->changePose3dTranslation(-1., 0., 0.);

		if (y_normalized > prev_y)
			sharer->changePose3dTranslation(0., -1., 0.);
		else if (y_normalized < prev_y)
			sharer->changePose3dTranslation(0., 1., 0.);
		this->prev_x = x_normalized;
		this->prev_y = y_normalized;
		//Set to API
		//pthread_mutex_lock(&api->controlGui);
		//api->setYawValue(yaw_normalized);
		//api->setPitchValue(pitch_normalized);
		//pthread_mutex_unlock(&api->controlGui);*/
	    }
예제 #16
0
파일: gtkev.c 프로젝트: tomby42/prg-xws
/* Vytvoøení GDK/X oken pro widget */
static void gtk_ev_realize(GtkWidget *widget)
{
    /* Default v GtkWidget je vhodný jen pro widgety bez GDK/X oken */
    GdkWindowAttr attr;
    gint attr_mask;
    GtkEv *ev;
    GdkCursor *cursor;

    g_return_if_fail(GTK_IS_EV(widget));

    ev = GTK_EV(widget);

    /* Nastavit pøíznak realizace */
    GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);

    /* Hlavní okno widgetu (GtkEv.window) */
    attr.window_type = GDK_WINDOW_CHILD;
    attr.x = widget->allocation.x;
    attr.y = widget->allocation.y;
    attr.width = widget->allocation.width;
    attr.height = widget->allocation.height;
    attr.wclass = GDK_INPUT_OUTPUT;
    attr.visual = gtk_widget_get_visual(widget);
    attr.colormap = gtk_widget_get_colormap(widget);
    attr.event_mask = gtk_widget_get_events(widget) |
        GDK_BUTTON_PRESS_MASK | GDK_EXPOSURE_MASK;

    attr_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;

    widget->window = gdk_window_new(gtk_widget_get_parent_window(widget),
                                    &attr, attr_mask);
    gdk_window_set_user_data(widget->window, widget); /* Odkaz z GDK okna na
                                                         pøíslu¹ný widget */

    /* Vnitøní okno pro události (GtkEv.ev_window) */
    attr.window_type = GDK_WINDOW_CHILD;
    attr.x = ev->ev_win_rect.x;
    attr.y = ev->ev_win_rect.y;
    attr.width = ev->ev_win_rect.width;
    attr.height = ev->ev_win_rect.height;
    attr.wclass = GDK_INPUT_OUTPUT;
    attr.visual = gtk_widget_get_visual(widget);
    attr.colormap = gtk_widget_get_colormap(widget);
    attr.event_mask = GDK_ALL_EVENTS_MASK;
    attr.cursor = cursor = gdk_cursor_new(GDK_CROSSHAIR);

    attr_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP |
        GDK_WA_CURSOR;
    
    ev->ev_win = gdk_window_new(widget->window, &attr, attr_mask);
    gdk_window_set_user_data(ev->ev_win, widget);

    gdk_window_show(ev->ev_win); /* gtk_widget_show() zobrazí pouze 
                                        GtkEv.window */

    gdk_cursor_destroy(cursor); /* Odkaz na kurzor u¾ dál nepotøebujeme, kurzor
                                   bude zru¹en, a¾ na nìj nebude odkazovat
                                   GtkEv.ev_win */
    
    /* Pøidání stylu k widgetu. Musí se provést po vytvoøení GDK oken, proto¾e
     * styl obsahuje odkazy na prostøedky (resources) X */
    widget->style = gtk_style_attach(widget->style, widget->window);
    gtk_style_set_background(widget->style, widget->window, GTK_STATE_NORMAL);
    gdk_window_set_background(ev->ev_win,
                              &widget->style->base[GTK_STATE_NORMAL]);

    /* Nevolat metodu pøedka, proto¾e není pou¾itelná pro GtkEv */
}
예제 #17
0
GtkWidget * gw_window_box_about_create ( GtkWindow *window)
{
        /* This window must be single, this property shouldn't be changed */
        static GtkWidget *w = NULL;
        GdkColor transparent = {0};
        GtkWidget *vbox_about = NULL;
        GtkWidget *label = NULL;
        GtkWidget *event_box = NULL;
        GtkWidget *logo = NULL;
	GdkPixmap *pix_gw_logo = NULL;
	GdkBitmap *msk_gw_logo = NULL;
        gchar * text = NULL;
        gchar * text_utf8 = NULL;
        GdkCursor *cursor = NULL;
        gchar * os_version = NULL;


#ifdef GW_DEBUG_GUI_COMPONENT
        g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__);
#endif

        if ( !w )
        {
	        /* GWhere logo loading */
	        pix_gw_logo = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( window)->window, &msk_gw_logo, &transparent, GWhere_logo_xpm);

                w = gtk_window_new ( GTK_WINDOW_TOPLEVEL);

                gtk_window_set_modal ( GTK_WINDOW ( w), TRUE);
                gtk_window_set_transient_for ( GTK_WINDOW ( w), window);
                gtk_window_set_position ( GTK_WINDOW ( w), GTK_WIN_POS_CENTER);
                g_strdup_to_gtk_text ( _( "About"), text_utf8);
                gtk_window_set_title ( GTK_WINDOW ( w), text_utf8);
                g_free ( text_utf8);

                gtk_signal_connect ( GTK_OBJECT ( w), "destroy", GTK_SIGNAL_FUNC ( gw_window_box_about_destroy), &w);
                gtk_signal_connect ( GTK_OBJECT ( w), "delete-event", GTK_SIGNAL_FUNC ( gtk_widget_destroy), NULL);

		/* See more bottom the call of gdk_pixmap_unref() and gdk_bitmap_unref().
		gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_WINDOW_ABOUT_LOGO_PIX, pix_gw_logo, ( GtkDestroyNotify)gdk_pixmap_unref);
		gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_WINDOW_ABOUT_LOGO_BIT, msk_gw_logo, ( GtkDestroyNotify)gdk_bitmap_unref);
		*/

                gtk_container_set_border_width ( GTK_CONTAINER ( w), 5);
                gtk_widget_set_usize ( w, 360, 340);

                event_box = gtk_event_box_new ( );
                gtk_container_add ( GTK_CONTAINER ( w), event_box);

                vbox_about = gtk_vbox_new ( FALSE, 0);
                gtk_container_add ( GTK_CONTAINER ( event_box), vbox_about);

                logo = gtk_pixmap_new ( pix_gw_logo, msk_gw_logo);
		gdk_pixmap_unref ( pix_gw_logo);
		gdk_bitmap_unref ( msk_gw_logo);
                gtk_container_add ( GTK_CONTAINER ( vbox_about), logo);

		/* Doesn't encode to UTF-8 substring because the result string will be encoded. */
		gw_os_get_version_str ( &os_version);
                text = g_strconcat ( PROJECT_NAME,
                                "-",
                                VERSION,
                                _( "\nRemovable media catalog management\nBy Sebastien LECACHEUR\n\[email protected]\nhttp://www.gwhere.org\n"),
                                _( "GWhere allows you to manage a database of your CDs and other removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse your CDs or to make a quick search without needing to insert all of your CDs in the drive and search them one by one."),
                                _( "\n\nRuns under "),
                                os_version,
                                NULL);
                if ( os_version != NULL )
                {
                	g_free ( os_version);
                }

		g_strdup_to_gtk_text ( text, text_utf8);
                g_free ( text);

                label = gtk_label_new ( text_utf8);
                g_free ( text_utf8);
                gtk_label_set_justify ( GTK_LABEL ( label), GTK_JUSTIFY_FILL);
                gtk_label_set_line_wrap ( GTK_LABEL ( label), TRUE);
                gtk_container_add ( GTK_CONTAINER ( vbox_about), label);

		/* Should it be mandatory? Yes, in order to get the good window size
		   to displaying all informations. */
		gtk_widget_set_usize ( label, 330, 280);

		gtk_widget_set_events ( event_box, GDK_BUTTON_PRESS_MASK);
		gtk_signal_connect_object ( GTK_OBJECT ( event_box), "button_press_event", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w));

		if ( (cursor = gdk_cursor_new ( GDK_HAND2)) != NULL)
		{
	                /* Fix bug : event_box->window is NULL with GTK-2.0. */
			if ( GTK_WIDGET ( event_box)->window != NULL )
			{
                		gdk_window_set_cursor ( GTK_WIDGET ( event_box)->window, cursor);
#ifdef HAVE_GTK20
                		gdk_cursor_unref ( cursor);
#endif
                	}
                	else
                	{
#ifdef GW_DEBUG_GUI_COMPONENT
                		g_warning ( "gtk_event_box->window is NULL!!");
#endif
                		gdk_cursor_destroy ( cursor);
                	}
                }
        }

        if ( !GTK_WIDGET_VISIBLE ( w) )
        {
#ifdef GW_DEBUG_GUI_COMPONENT
                g_print ( "*** GW - %s (%d) :: %s() : show the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__);
#endif

                gtk_widget_show_all ( w);
        }
        else
        {
#ifdef GW_DEBUG_GUI_COMPONENT
        g_print ( "*** GW - %s (%d) :: %s() : destroy the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__);
#endif

		g_warning ( "gw_window_box_about is already displayed!! Destroying it...");

                gtk_widget_destroy ( w);
        }

        return w;
}
예제 #18
0
static gint handle_callback (GnomeCanvasItem *item, GdkEvent *event, gpointer _data) {
	struct channel_data *data=(struct channel_data *)_data;
	GdkCursor	*fleur;

	switch(event->type) {
		case GDK_ENTER_NOTIFY:
			gnome_canvas_item_set(data->handle1,"fill_color","black",NULL);
			gnome_canvas_item_set(data->handle2,"fill_color","black",NULL);
			gnome_canvas_item_set(data->handle3,"fill_color","black",NULL);
			break;
		
		case GDK_LEAVE_NOTIFY:
			gnome_canvas_item_set(data->handle1,"fill_color",NULL,NULL);
			gnome_canvas_item_set(data->handle2,"fill_color",NULL,NULL);
			gnome_canvas_item_set(data->handle3,"fill_color",NULL,NULL);
			break;
		
		case GDK_BUTTON_PRESS:
			switch(event->button.button) {
				case 1:		// Left Mousebutton
					fleur = gdk_cursor_new (GDK_FLEUR);
					press_x=event->button.x;
					press_y=event->button.y;
			                gnome_canvas_item_grab (item,
        	                                GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
	                                        fleur, event->button.time);
			                gdk_cursor_destroy (fleur);

					break;
				case 2:		// Middle Mousebutton
					break;
				case 3:		// Right Mousebutton
					break;
				default:	// Unkown Mousebutton
					break;
			}
			break;
		
		case GDK_BUTTON_RELEASE:
			gnome_canvas_item_ungrab (item, event->button.time);
			break;
		
		case GDK_MOTION_NOTIFY:
			if (event->motion.state & GDK_BUTTON1_MASK){
				if (item==data->handle1) {
					data->t1=CHARTER_RX(event->motion.x);
					data->v1=CHARTER_RY(event->motion.y);
					reset_from_data(data);
				}
				if (item==data->handle2) {
					data->t2=CHARTER_RX(event->motion.x);
					data->v2=CHARTER_RY(event->motion.y);
					reset_from_data(data);
				}
				if (item==data->handle3) {
					// Calc new dist
				
					data->dist=-CHARTER_RX(sqrt(pow((press_x-data->line3_points->coords[0]),2)+pow((press_y-data->line3_points->coords[1]),2)));
					reset_from_data(data);
				}

				press_x=event->motion.x;
				press_y=event->motion.y;
			}
			break;
		default: break;
		
	}
	return FALSE;
}
예제 #19
0
파일: gtkcombo.c 프로젝트: Onjrew/OpenEV
static void
gtk_combo_init (GtkCombo * combo)
{
  GtkWidget *arrow;
  GtkWidget *frame;
  GtkWidget *event_box;
  GdkCursor *cursor;

  combo->case_sensitive = 0;
  combo->value_in_list = 0;
  combo->ok_if_empty = 1;
  combo->use_arrows = 1;
  combo->use_arrows_always = 0;
  combo->entry = gtk_entry_new ();
  combo->button = gtk_button_new ();
  combo->current_button = 0;
  arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_OUT);
  gtk_widget_show (arrow);
  gtk_container_add (GTK_CONTAINER (combo->button), arrow);
  gtk_box_pack_start (GTK_BOX (combo), combo->entry, TRUE, TRUE, 0);
  gtk_box_pack_end (GTK_BOX (combo), combo->button, FALSE, FALSE, 0);
  GTK_WIDGET_UNSET_FLAGS (combo->button, GTK_CAN_FOCUS);
  gtk_widget_show (combo->entry);
  gtk_widget_show (combo->button);
  combo->entry_change_id = gtk_signal_connect (GTK_OBJECT (combo->entry), "changed",
			      (GtkSignalFunc) gtk_combo_update_list, combo);
  gtk_signal_connect (GTK_OBJECT (combo->entry), "key_press_event",
		      (GtkSignalFunc) gtk_combo_entry_key_press, combo);
  gtk_signal_connect_after (GTK_OBJECT (combo->entry), "focus_out_event",
			    (GtkSignalFunc) gtk_combo_entry_focus_out, combo);
  combo->activate_id = gtk_signal_connect (GTK_OBJECT (combo->entry), "activate",
		      (GtkSignalFunc) gtk_combo_activate, combo);
  gtk_signal_connect_after (GTK_OBJECT (combo->button), "button_press_event",
			    (GtkSignalFunc) gtk_combo_popup_button_press, combo);
  /*gtk_signal_connect_after (GTK_OBJECT (combo->button), "button_release_event",
    (GtkSignalFunc) gtk_combo_button_release, combo);*/
  gtk_signal_connect (GTK_OBJECT (combo->button), "leave_notify_event",
		      (GtkSignalFunc) gtk_combo_popup_button_leave, combo);
  /*gtk_signal_connect(GTK_OBJECT(combo->button), "clicked",
     (GtkSignalFunc)prelight_bug, combo); */

  combo->popwin = gtk_window_new (GTK_WINDOW_POPUP);
  gtk_widget_ref (combo->popwin);
  gtk_window_set_policy (GTK_WINDOW (combo->popwin), 1, 1, 0);
  
  gtk_widget_set_events (combo->popwin, GDK_KEY_PRESS_MASK);

  event_box = gtk_event_box_new ();
  gtk_container_add (GTK_CONTAINER (combo->popwin), event_box);
  gtk_widget_show (event_box);

  gtk_widget_realize (event_box);
  cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW);
  gdk_window_set_cursor (event_box->window, cursor);
  gdk_cursor_destroy (cursor);

  frame = gtk_frame_new (NULL);
  gtk_container_add (GTK_CONTAINER (event_box), frame);
  gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
  gtk_widget_show (frame);

  combo->popup = gtk_scrolled_window_new (NULL, NULL);
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (combo->popup),
				  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
  GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (combo->popup)->hscrollbar, GTK_CAN_FOCUS);
  GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (combo->popup)->vscrollbar, GTK_CAN_FOCUS);
  gtk_container_add (GTK_CONTAINER (frame), combo->popup);
  gtk_widget_show (combo->popup);

  combo->list = gtk_list_new ();
  /* We'll use enter notify events to figure out when to transfer
   * the grab to the list
   */
  gtk_widget_set_events (combo->list, GDK_ENTER_NOTIFY_MASK);

  gtk_list_set_selection_mode(GTK_LIST(combo->list), GTK_SELECTION_BROWSE);
  gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (combo->popup), combo->list);
  gtk_container_set_focus_vadjustment (GTK_CONTAINER (combo->list),
				       gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (combo->popup)));
  gtk_container_set_focus_hadjustment (GTK_CONTAINER (combo->list),
				       gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (combo->popup)));
  gtk_widget_show (combo->list);

  combo->list_change_id = gtk_signal_connect (GTK_OBJECT (combo->list), "selection_changed",
			     (GtkSignalFunc) gtk_combo_update_entry, combo);
  gtk_signal_connect (GTK_OBJECT (combo->popwin), "key_press_event",
		      (GtkSignalFunc) gtk_combo_list_key_press, combo);
  gtk_signal_connect (GTK_OBJECT (combo->popwin), "button_press_event",
		      GTK_SIGNAL_FUNC (gtk_combo_button_press), combo);

  gtk_signal_connect_after (GTK_OBJECT (combo->list), "button_release_event",
			    GTK_SIGNAL_FUNC (gtk_combo_button_release), combo);
  /* We connect here on the button, because we'll have a grab on it
   * when the event occurs. But we are actually interested in enters
   * for the combo->list.
   */
  gtk_signal_connect (GTK_OBJECT (combo->button), "enter_notify_event",
		      GTK_SIGNAL_FUNC (gtk_combo_list_enter), combo);
}
예제 #20
0
static gint channel_callback (GnomeCanvasItem *item, GdkEvent *event, gpointer _data) {
	GdkCursor	*fleur;
	struct channel_data *data=(struct channel_data *)_data;
	
	switch(event->type) {
		case GDK_ENTER_NOTIFY:
			gnome_canvas_item_set(data->handle1,"fill_color","#909090",NULL);
			gnome_canvas_item_set(data->handle2,"fill_color","#909090",NULL);
			gnome_canvas_item_set(data->handle3,"fill_color","#909090",NULL);
			break;
		
		case GDK_LEAVE_NOTIFY:
			gnome_canvas_item_set(data->handle1,"fill_color",NULL,NULL);
			gnome_canvas_item_set(data->handle2,"fill_color",NULL,NULL);
			gnome_canvas_item_set(data->handle3,"fill_color",NULL,NULL);
			break;
		
		case GDK_BUTTON_PRESS:
			switch(event->button.button) {
				case 1:		// Left Mousebutton
					fleur = gdk_cursor_new (GDK_FLEUR);
					press_x=event->button.x;
					press_y=event->button.y;
					
			                gnome_canvas_item_grab (item,
        	                                GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
	                                        fleur, event->button.time);
			                gdk_cursor_destroy (fleur);

					break;
				case 2:		// Middle Mousebutton
					break;
				case 3:		// Right Mousebutton
					break;
				default:	// Unkown Mousebutton
					break;
			}
			break;
		
		case GDK_BUTTON_RELEASE:
			gnome_canvas_item_ungrab (item, event->button.time);
			break;
		
		case GDK_MOTION_NOTIFY:
			if (event->motion.state & GDK_BUTTON1_MASK){
				// Do some delta-magic to move the points relatively to pointer motion

				data->t1-=CHARTER_RX(press_x-event->motion.x);
				data->v1-=CHARTER_RY(press_y-event->motion.y);
				data->t2-=CHARTER_RX(press_x-event->motion.x);
				data->v2-=CHARTER_RY(press_y-event->motion.y);
				reset_from_data(data);

				press_x=event->motion.x;
				press_y=event->motion.y;
			}
			break;
		default:break;
		
	}
	return FALSE;
}
예제 #21
0
static gboolean
bst_canvas_source_event (GnomeCanvasItem *item,
			 GdkEvent        *event)
{
  BstCanvasSource *csource = BST_CANVAS_SOURCE (item);
  gboolean handled = FALSE;
  
  switch (event->type)
    {
    case GDK_BUTTON_PRESS:
      if (!csource->in_move && event->button.button == 2)
	{
	  GdkCursor *fleur = gdk_cursor_new (GDK_FLEUR);
	  if (gnome_canvas_item_grab (item,
                                      GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
                                      fleur,
                                      event->button.time) == 0)
            {
              gdouble x = event->button.x, y = event->button.y;
              gnome_canvas_item_w2i (item, &x, &y);
              csource->move_dx = x;
              csource->move_dy = y;
              csource->in_move = TRUE;
              bse_item_group_undo (csource->source, "Move");
            }
	  gdk_cursor_destroy (fleur);
	  handled = TRUE;
	}
      break;
    case GDK_MOTION_NOTIFY:
      if (csource->in_move)
	{
	  gdouble x = event->motion.x, y = event->motion.y;
	  
	  gnome_canvas_item_w2i (item, &x, &y);
	  gnome_canvas_item_move (item, x - csource->move_dx, y - csource->move_dy);
	  GNOME_CANVAS_NOTIFY (item);
	  handled = TRUE;
	}
      else
	{
	  guint channel;
	  const gchar *label = NULL, *prefix = NULL, *ident = NULL;

	  /* set i/o channel hints */
	  channel = bst_canvas_source_ichannel_at (csource, event->motion.x, event->motion.y);
	  if (channel != ~0)
	    {
	      label = bse_source_ichannel_label (csource->source, channel);
	      ident = bse_source_ichannel_ident (csource->source, channel);
	      prefix = _("Input");
	    }
	  else
	    {
	      channel = bst_canvas_source_ochannel_at (csource, event->motion.x, event->motion.y);
	      if (channel != ~0)
		{
		  label = bse_source_ochannel_label (csource->source, channel);
		  ident = bse_source_ochannel_ident (csource->source, channel);
		  prefix = _("Output");
		}
	    }
	  if (label)
	    gxk_status_printf (GXK_STATUS_IDLE_HINT, _("(Hint)"), "%s[%s]: %s", prefix, ident, label);
	  else
	    gxk_status_set (GXK_STATUS_IDLE_HINT, NULL, NULL);
	}
      break;
    case GDK_BUTTON_RELEASE:
      if (event->button.button == 2 && csource->in_move)
	{
          bse_item_ungroup_undo (csource->source);
	  csource->in_move = FALSE;
	  gnome_canvas_item_ungrab (item, event->button.time);
	  handled = TRUE;
	}
      break;
    default:
      break;
    }
  
  if (!handled && GNOME_CANVAS_ITEM_CLASS (bst_canvas_source_parent_class)->event)
    handled = GNOME_CANVAS_ITEM_CLASS (bst_canvas_source_parent_class)->event (item, event);
  
  return handled;
}
예제 #22
0
static gboolean
bst_canvas_link_event (GnomeCanvasItem *item,
		       GdkEvent        *event)
{
  BstCanvasLink *clink = BST_CANVAS_LINK (item);
  gboolean handled = FALSE;
  
  switch (event->type)
    {
    case GDK_BUTTON_PRESS:
      if (event->button.button == 2)
	{
	  GdkCursor *fleur;
	  
	  if (clink->ocsource)
	    {
	      clink->start_move_dx = event->button.x;
	      clink->start_move_dy = event->button.y;
	      gnome_canvas_item_w2i (GNOME_CANVAS_ITEM (clink->ocsource),
				     &clink->start_move_dx,
				     &clink->start_move_dy);
	    }
	  if (clink->icsource)
	    {
	      clink->end_move_dx = event->button.x;
	      clink->end_move_dy = event->button.y;
	      gnome_canvas_item_w2i (GNOME_CANVAS_ITEM (clink->icsource),
				     &clink->end_move_dx,
				     &clink->end_move_dy);
	    }
	  clink->in_move = TRUE;
	  
	  fleur = gdk_cursor_new (GDK_FLEUR);
	  gnome_canvas_item_grab (item,
				  GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
				  fleur,
				  event->button.time);
	  gdk_cursor_destroy (fleur);
	  handled = TRUE;
	}
      break;
    case GDK_MOTION_NOTIFY:
      if (clink->in_move && clink->ocsource)
	{
	  gdouble x = event->motion.x, y = event->motion.y;
	  
	  gnome_canvas_item_w2i (GNOME_CANVAS_ITEM (clink->ocsource), &x, &y);
	  gnome_canvas_item_move (GNOME_CANVAS_ITEM (clink->ocsource),
				  x - clink->start_move_dx,
				  y - clink->start_move_dy);
	  GNOME_CANVAS_NOTIFY (clink->ocsource);
	  handled = TRUE;
	}
      if (clink->in_move && clink->icsource)
	{
	  gdouble x = event->motion.x, y = event->motion.y;
	  
	  gnome_canvas_item_w2i (GNOME_CANVAS_ITEM (clink->icsource), &x, &y);
	  gnome_canvas_item_move (GNOME_CANVAS_ITEM (clink->icsource),
				  x - clink->end_move_dx,
				  y - clink->end_move_dy);
	  GNOME_CANVAS_NOTIFY (clink->icsource);
	  handled = TRUE;
	}
      break;
    case GDK_BUTTON_RELEASE:
      if (event->button.button == 2 && clink->in_move)
	{
	  clink->in_move = FALSE;
	  gnome_canvas_item_ungrab (item, event->button.time);
	  handled = TRUE;
	}
      break;
    default:
      break;
    }
  
  if (!handled && GNOME_CANVAS_ITEM_CLASS (bst_canvas_link_parent_class)->event)
    handled |= GNOME_CANVAS_ITEM_CLASS (bst_canvas_link_parent_class)->event (item, event);
  
  return handled;
}