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

📄 gtkmain.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 3 页
字号:
static voidgtk_quit_destroy (GtkQuitFunction *quitf){  if (quitf->destroy)    quitf->destroy (quitf->data);  g_mem_chunk_free (quit_mem_chunk, quitf);}static gintgtk_quit_destructor (GtkObject **object_p){  if (*object_p)    gtk_object_destroy (*object_p);  g_free (object_p);  return FALSE;}voidgtk_quit_add_destroy (guint              main_level,		      GtkObject         *object){  GtkObject **object_p;  g_return_if_fail (main_level > 0);  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  object_p = g_new (GtkObject*, 1);  *object_p = object;  gtk_signal_connect (object,		      "destroy",		      GTK_SIGNAL_FUNC (gtk_widget_destroyed),		      object_p);  gtk_quit_add (main_level, (GtkFunction) gtk_quit_destructor, object_p);}guintgtk_quit_add (guint	  main_level,	      GtkFunction function,	      gpointer	  data){  return gtk_quit_add_full (main_level, function, NULL, data, NULL);}voidgtk_quit_remove (guint id){  GtkQuitFunction *quitf;  GList *tmp_list;    tmp_list = quit_functions;  while (tmp_list)    {      quitf = tmp_list->data;            if (quitf->id == id)	{	  quit_functions = g_list_remove_link (quit_functions, tmp_list);	  g_list_free (tmp_list);	  gtk_quit_destroy (quitf);	  	  return;	}            tmp_list = tmp_list->next;    }}voidgtk_quit_remove_by_data (gpointer data){  GtkQuitFunction *quitf;  GList *tmp_list;    tmp_list = quit_functions;  while (tmp_list)    {      quitf = tmp_list->data;            if (quitf->data == data)	{	  quit_functions = g_list_remove_link (quit_functions, tmp_list);	  g_list_free (tmp_list);	  gtk_quit_destroy (quitf);	  return;	}            tmp_list = tmp_list->next;    }}guintgtk_timeout_add_full (guint32		 interval,		      GtkFunction	 function,		      GtkCallbackMarshal marshal,		      gpointer		 data,		      GtkDestroyNotify	 destroy){  if (marshal)    {      GtkClosure *closure;      closure = g_new (GtkClosure, 1);      closure->marshal = marshal;      closure->data = data;      closure->destroy = destroy;      return g_timeout_add_full (0, interval, 				 gtk_invoke_idle_timeout,				 closure,				 gtk_destroy_closure);    }  else    return g_timeout_add_full (0, interval, function, data, destroy);}guintgtk_timeout_add (guint32     interval,		 GtkFunction function,		 gpointer    data){  return g_timeout_add_full (0, interval, function, data, NULL);}voidgtk_timeout_remove (guint tag){  g_source_remove (tag);}guintgtk_idle_add_full (gint			priority,		   GtkFunction		function,		   GtkCallbackMarshal	marshal,		   gpointer		data,		   GtkDestroyNotify	destroy){  if (marshal)    {      GtkClosure *closure;      closure = g_new (GtkClosure, 1);      closure->marshal = marshal;      closure->data = data;      closure->destroy = destroy;      return g_idle_add_full (priority,			      gtk_invoke_idle_timeout,			      closure,			      gtk_destroy_closure);    }  else    return g_idle_add_full (priority, function, data, destroy);}guintgtk_idle_add (GtkFunction function,	      gpointer	  data){  return g_idle_add_full (GTK_PRIORITY_DEFAULT, function, data, NULL);}guint	    gtk_idle_add_priority	(gint		    priority,			 GtkFunction	    function,			 gpointer	    data){  return g_idle_add_full (priority, function, data, NULL);}voidgtk_idle_remove (guint tag){  g_source_remove (tag);}voidgtk_idle_remove_by_data (gpointer data){  if (!g_idle_remove_by_data (data))    g_warning ("gtk_idle_remove_by_data(%p): no such idle", data);}guintgtk_input_add_full (gint		source,		    GdkInputCondition	condition,		    GdkInputFunction	function,		    GtkCallbackMarshal	marshal,		    gpointer		data,		    GtkDestroyNotify	destroy){  if (marshal)    {      GtkClosure *closure;      closure = g_new (GtkClosure, 1);      closure->marshal = marshal;      closure->data = data;      closure->destroy = destroy;      return gdk_input_add_full (source,				 condition,				 (GdkInputFunction) gtk_invoke_input,				 closure,				 (GdkDestroyNotify) gtk_destroy_closure);    }  else    return gdk_input_add_full (source, condition, function, data, destroy);}voidgtk_input_remove (guint tag){  g_source_remove (tag);}static voidgtk_destroy_closure (gpointer data){  GtkClosure *closure = data;  if (closure->destroy)    (closure->destroy) (closure->data);  g_free (closure);}static gbooleangtk_invoke_idle_timeout (gpointer data){  GtkClosure *closure = data;  GtkArg args[1];  gint ret_val = FALSE;  args[0].name = NULL;  args[0].type = GTK_TYPE_BOOL;  args[0].d.pointer_data = &ret_val;  closure->marshal (NULL, closure->data,  0, args);  return ret_val;}static voidgtk_invoke_input (gpointer	    data,		  gint		    source,		  GdkInputCondition condition){  GtkClosure *closure = data;  GtkArg args[3];  args[0].type = GTK_TYPE_INT;  args[0].name = NULL;  GTK_VALUE_INT(args[0]) = source;  args[1].type = GTK_TYPE_GDK_INPUT_CONDITION;  args[1].name = NULL;  GTK_VALUE_FLAGS(args[1]) = condition;  args[2].type = GTK_TYPE_NONE;  args[2].name = NULL;  closure->marshal (NULL, closure->data, 2, args);}GdkEvent*gtk_get_current_event (void){  if (current_events)    return gdk_event_copy ((GdkEvent *) current_events->data);  else    return NULL;}GtkWidget*gtk_get_event_widget (GdkEvent *event){  GtkWidget *widget;  widget = NULL;  if (event && event->any.window)    gdk_window_get_user_data (event->any.window, (void**) &widget);    return widget;}static voidgtk_exit_func (void){  if (gtk_initialized)    {      gtk_initialized = FALSE;      gtk_preview_uninit ();    }}static gintgtk_quit_invoke_function (GtkQuitFunction *quitf){  if (!quitf->marshal)    return quitf->function (quitf->data);  else    {      GtkArg args[1];      gint ret_val = FALSE;      args[0].name = NULL;      args[0].type = GTK_TYPE_BOOL;      args[0].d.pointer_data = &ret_val;      ((GtkCallbackMarshal) quitf->marshal) (NULL,					     quitf->data,					     0, args);      return ret_val;    }}voidgtk_propagate_event (GtkWidget *widget,		     GdkEvent  *event){  gint handled_event;    g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_WIDGET (widget));  g_return_if_fail (event != NULL);    handled_event = FALSE;  if ((event->type == GDK_KEY_PRESS) ||      (event->type == GDK_KEY_RELEASE))    {      /* Only send key events within Window widgets to the Window       *  The Window widget will in turn pass the       *  key event on to the currently focused widget       *  for that window.       */      GtkWidget *window;      window = gtk_widget_get_ancestor (widget, GTK_TYPE_WINDOW);      if (window)        {	  if (GTK_WIDGET_IS_SENSITIVE (window))	    gtk_widget_event (window, event);          handled_event = TRUE; /* don't send to widget */        }    }    /* Other events get propagated up the widget tree   *  so that parents can see the button and motion   *  events of the children.   */  while (!handled_event && widget)    {      GtkWidget *tmp;      gtk_widget_ref (widget);      handled_event = !GTK_WIDGET_IS_SENSITIVE (widget) || gtk_widget_event (widget, event);      tmp = widget->parent;      gtk_widget_unref (widget);      widget  = tmp;    }}#if 0static voidgtk_error (gchar *str){  gtk_print (str);}static voidgtk_warning (gchar *str){  gtk_print (str);}static voidgtk_message (gchar *str){  gtk_print (str);}static voidgtk_print (gchar *str){  static GtkWidget *window = NULL;  static GtkWidget *text;  static int level = 0;  GtkWidget *box1;  GtkWidget *box2;  GtkWidget *table;  GtkWidget *hscrollbar;  GtkWidget *vscrollbar;  GtkWidget *separator;  GtkWidget *button;    if (level > 0)    {      fputs (str, stdout);      fflush (stdout);      return;    }    if (!window)    {      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);            gtk_signal_connect (GTK_OBJECT (window), "destroy",			  (GtkSignalFunc) gtk_widget_destroyed,			  &window);            gtk_window_set_title (GTK_WINDOW (window), "Messages");            box1 = gtk_vbox_new (FALSE, 0);      gtk_container_add (GTK_CONTAINER (window), box1);      gtk_widget_show (box1);                  box2 = gtk_vbox_new (FALSE, 10);      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);      gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);      gtk_widget_show (box2);                  table = gtk_table_new (2, 2, FALSE);      gtk_table_set_row_spacing (GTK_TABLE (table), 0, 2);      gtk_table_set_col_spacing (GTK_TABLE (table), 0, 2);      gtk_box_pack_start (GTK_BOX (box2), table, TRUE, TRUE, 0);      gtk_widget_show (table);            text = gtk_text_new (NULL, NULL);      gtk_text_set_editable (GTK_TEXT (text), FALSE);      gtk_table_attach_defaults (GTK_TABLE (table), text, 0, 1, 0, 1);      gtk_widget_show (text);      gtk_widget_realize (text);            hscrollbar = gtk_hscrollbar_new (GTK_TEXT (text)->hadj);      gtk_table_attach (GTK_TABLE (table), hscrollbar, 0, 1, 1, 2,			GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);      gtk_widget_show (hscrollbar);            vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj);      gtk_table_attach (GTK_TABLE (table), vscrollbar, 1, 2, 0, 1,			GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);      gtk_widget_show (vscrollbar);            separator = gtk_hseparator_new ();      gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);      gtk_widget_show (separator);                  box2 = gtk_vbox_new (FALSE, 10);      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);      gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);      gtk_widget_show (box2);                  button = gtk_button_new_with_label ("close");      gtk_signal_connect_object (GTK_OBJECT (button), "clicked",				 (GtkSignalFunc) gtk_widget_hide,				 GTK_OBJECT (window));      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);      gtk_widget_grab_default (button);      gtk_widget_show (button);    }    level += 1;  gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, str, -1);  level -= 1;    if (!GTK_WIDGET_VISIBLE (window))    gtk_widget_show (window);}#endif

⌨️ 快捷键说明

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