⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testdnd.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 2 页
字号:
  have_drag = FALSE;  gtk_pixmap_set (GTK_PIXMAP (widget), trashcan_closed, trashcan_closed_mask);  if (context->targets)    {      gtk_drag_get_data (widget, context, 			 GPOINTER_TO_INT (context->targets->data), 			 time);      return TRUE;    }    return FALSE;}void  target_drag_data_received  (GtkWidget          *widget,			    GdkDragContext     *context,			    gint                x,			    gint                y,			    GtkSelectionData   *data,			    guint               info,			    guint               time){  if ((data->length >= 0) && (data->format == 8))    {      g_print ("Received \"%s\" in trashcan\n", (gchar *)data->data);      gtk_drag_finish (context, TRUE, FALSE, time);      return;    }    gtk_drag_finish (context, FALSE, FALSE, time);}  void  label_drag_data_received  (GtkWidget          *widget,			    GdkDragContext     *context,			    gint                x,			    gint                y,			    GtkSelectionData   *data,			    guint               info,			    guint               time){  if ((data->length >= 0) && (data->format == 8))    {      g_print ("Received \"%s\" in label\n", (gchar *)data->data);      gtk_drag_finish (context, TRUE, FALSE, time);      return;    }    gtk_drag_finish (context, FALSE, FALSE, time);}void  source_drag_data_get  (GtkWidget          *widget,		       GdkDragContext     *context,		       GtkSelectionData   *selection_data,		       guint               info,		       guint               time,		       gpointer            data){  if (info == TARGET_ROOTWIN)    g_print ("I was dropped on the rootwin\n");  else if (info == TARGET_URL)    gtk_selection_data_set (selection_data,			    selection_data->target,			    8, "file:///home/otaylor/images/weave.png", 37);  else    gtk_selection_data_set (selection_data,			    selection_data->target,			    8, "I'm Data!", 9);}  /* The following is a rather elaborate example demonstrating/testing * changing of the window heirarchy during a drag - in this case, * via a "spring-loaded" popup window. */static GtkWidget *popup_window = NULL;static gboolean popped_up = FALSE;static gboolean in_popup = FALSE;static guint popdown_timer = 0;static guint popup_timer = 0;gintpopdown_cb (gpointer data){  popdown_timer = 0;  gtk_widget_hide (popup_window);  popped_up = FALSE;  return FALSE;}gbooleanpopup_motion	   (GtkWidget	       *widget,		    GdkDragContext     *context,		    gint                x,		    gint                y,		    guint               time){  if (!in_popup)    {      in_popup = TRUE;      if (popdown_timer)	{	  g_print ("removed popdown\n");	  gtk_timeout_remove (popdown_timer);	  popdown_timer = 0;	}    }  return TRUE;}void  popup_leave	   (GtkWidget	       *widget,		    GdkDragContext     *context,		    guint               time){  if (in_popup)    {      in_popup = FALSE;      if (!popdown_timer)	{	  g_print ("added popdown\n");	  popdown_timer = gtk_timeout_add (500, popdown_cb, NULL);	}    }}gintpopup_cb (gpointer data){  if (!popped_up)    {      if (!popup_window)	{	  GtkWidget *button;	  GtkWidget *table;	  int i, j;	  	  popup_window = gtk_window_new (GTK_WINDOW_POPUP);	  gtk_window_set_position (GTK_WINDOW (popup_window), GTK_WIN_POS_MOUSE);	  table = gtk_table_new (3,3, FALSE);	  for (i=0; i<3; i++)	    for (j=0; j<3; j++)	      {		char buffer[128];		g_snprintf(buffer, sizeof(buffer), "%d,%d", i, j);		button = gtk_button_new_with_label (buffer);		gtk_table_attach (GTK_TABLE (table), button, i, i+1, j, j+1,				  GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,				  0, 0);		gtk_drag_dest_set (button,				   GTK_DEST_DEFAULT_ALL,				   target_table, n_targets - 1, /* no rootwin */				   GDK_ACTION_COPY | GDK_ACTION_MOVE);		gtk_signal_connect (GTK_OBJECT (button), "drag_motion",				    GTK_SIGNAL_FUNC (popup_motion), NULL);		gtk_signal_connect (GTK_OBJECT (button), "drag_leave",				    GTK_SIGNAL_FUNC (popup_leave), NULL);	      }	  gtk_widget_show_all (table);	  gtk_container_add (GTK_CONTAINER (popup_window), table);	}      gtk_widget_show (popup_window);      popped_up = TRUE;    }  popdown_timer = gtk_timeout_add (500, popdown_cb, NULL);  g_print ("added popdown\n");  popup_timer = FALSE;  return FALSE;}gbooleanpopsite_motion	   (GtkWidget	       *widget,		    GdkDragContext     *context,		    gint                x,		    gint                y,		    guint               time){  if (!popup_timer)    popup_timer = gtk_timeout_add (500, popup_cb, NULL);  return TRUE;}void  popsite_leave	   (GtkWidget	       *widget,		    GdkDragContext     *context,		    guint               time){  if (popup_timer)    {      gtk_timeout_remove (popup_timer);      popup_timer = 0;    }}void  source_drag_data_delete  (GtkWidget          *widget,			  GdkDragContext     *context,			  gpointer            data){  g_print ("Delete the data!\n");}  int main (int argc, char **argv){  GtkWidget *window;  GtkWidget *table;  GtkWidget *label;  GtkWidget *pixmap;  GtkWidget *button;  GdkPixmap *drag_icon;  GdkPixmap *drag_mask;  gtk_init (&argc, &argv);   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  gtk_signal_connect (GTK_OBJECT(window), "destroy",		      GTK_SIGNAL_FUNC (gtk_main_quit), NULL);    table = gtk_table_new (2, 2, FALSE);  gtk_container_add (GTK_CONTAINER (window), table);  drag_icon = gdk_pixmap_colormap_create_from_xpm_d (NULL,						     gtk_widget_get_colormap (window),						     &drag_mask,						     NULL, drag_icon_xpm);  trashcan_open = gdk_pixmap_colormap_create_from_xpm_d (NULL,							 gtk_widget_get_colormap (window),							 &trashcan_open_mask,							 NULL, trashcan_open_xpm);  trashcan_closed = gdk_pixmap_colormap_create_from_xpm_d (NULL,							   gtk_widget_get_colormap (window),							   &trashcan_closed_mask,							   NULL, trashcan_closed_xpm);    label = gtk_label_new ("Drop Here\n");  gtk_drag_dest_set (label,		     GTK_DEST_DEFAULT_ALL,		     target_table, n_targets - 1, /* no rootwin */		     GDK_ACTION_COPY | GDK_ACTION_MOVE);  gtk_signal_connect( GTK_OBJECT(label), "drag_data_received",		      GTK_SIGNAL_FUNC( label_drag_data_received), NULL);  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,		    GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,		    0, 0);  label = gtk_label_new ("Popup\n");  gtk_drag_dest_set (label,		     GTK_DEST_DEFAULT_ALL,		     target_table, n_targets - 1, /* no rootwin */		     GDK_ACTION_COPY | GDK_ACTION_MOVE);  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 1, 2,		    GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,		    0, 0);  gtk_signal_connect (GTK_OBJECT (label), "drag_motion",		      GTK_SIGNAL_FUNC (popsite_motion), NULL);  gtk_signal_connect (GTK_OBJECT (label), "drag_leave",		      GTK_SIGNAL_FUNC (popsite_leave), NULL);    pixmap = gtk_pixmap_new (trashcan_closed, trashcan_closed_mask);  gtk_drag_dest_set (pixmap, 0, NULL, 0, 0);  gtk_table_attach (GTK_TABLE (table), pixmap, 1, 2, 0, 1,		    GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,		    0, 0);  gtk_signal_connect (GTK_OBJECT (pixmap), "drag_leave",		      GTK_SIGNAL_FUNC (target_drag_leave), NULL);  gtk_signal_connect (GTK_OBJECT (pixmap), "drag_motion",		      GTK_SIGNAL_FUNC (target_drag_motion), NULL);  gtk_signal_connect (GTK_OBJECT (pixmap), "drag_drop",		      GTK_SIGNAL_FUNC (target_drag_drop), NULL);  gtk_signal_connect (GTK_OBJECT (pixmap), "drag_data_received",		      GTK_SIGNAL_FUNC (target_drag_data_received), NULL);  /* Drag site */  button = gtk_button_new_with_label ("Drag Here\n");  gtk_drag_source_set (button, GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,		       target_table, n_targets, 		       GDK_ACTION_COPY | GDK_ACTION_MOVE);  gtk_drag_source_set_icon (button, 			    gtk_widget_get_colormap (window),			    drag_icon, drag_mask);  gdk_pixmap_unref (drag_icon);  gdk_pixmap_unref (drag_mask);  gtk_table_attach (GTK_TABLE (table), button, 0, 1, 1, 2,		    GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,		    0, 0);  gtk_signal_connect (GTK_OBJECT (button), "drag_data_get",		      GTK_SIGNAL_FUNC (source_drag_data_get), NULL);  gtk_signal_connect (GTK_OBJECT (button), "drag_data_delete",		      GTK_SIGNAL_FUNC (source_drag_data_delete), NULL);  gtk_widget_show_all (window);  gtk_main ();  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -