gchar * get_package_name_from_desktop_item (MateDesktopItem * desktop_item) { gchar *argv[6]; gchar *package_name; gint retval; GError *error; argv[0] = "rpm"; argv[1] = "-qf"; argv[2] = "--qf"; argv[3] = "%{NAME}"; argv[4] = g_filename_from_uri (mate_desktop_item_get_location (desktop_item), NULL, NULL); argv[5] = NULL; error = NULL; if (!g_spawn_sync (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &package_name, NULL, &retval, &error)) { g_warning ("error: [%s]\n", error->message); g_error_free (error); retval = -1; } g_free (argv[4]); if (!retval) return package_name; else return NULL; }
gboolean open_desktop_item_exec (MateDesktopItem * desktop_item) { GError *error = NULL; if (!desktop_item) return FALSE; mate_desktop_item_launch (desktop_item, NULL, MATE_DESKTOP_ITEM_LAUNCH_ONLY_ONE, &error); if (error) { g_warning ("error launching %s [%s]\n", mate_desktop_item_get_location (desktop_item), error->message); g_error_free (error); return FALSE; } return TRUE; }
GtkWidget * system_tile_new (const gchar *desktop_item_id, const gchar *title) { SystemTile *this; SystemTilePrivate *priv; gchar *uri = NULL; GtkWidget *header = NULL; GtkMenu *context_menu; TileAction **actions; TileAction *action; GtkWidget *menu_item; GtkContainer *menu_ctnr; MateDesktopItem *desktop_item = NULL; gchar *image_id = NULL; gchar *header_txt = NULL; gchar *markup; AtkObject *accessible = NULL; desktop_item = libslab_mate_desktop_item_new_from_unknown_id (desktop_item_id); if (desktop_item) { image_id = g_strdup (mate_desktop_item_get_localestring (desktop_item, "Icon")); uri = g_strdup (mate_desktop_item_get_location (desktop_item)); if (title) header_txt = g_strdup (title); else header_txt = g_strdup ( mate_desktop_item_get_localestring (desktop_item, "Name")); } if (! uri) return NULL; header = create_header (header_txt); context_menu = GTK_MENU (gtk_menu_new ()); this = g_object_new ( SYSTEM_TILE_TYPE, "tile-uri", uri, "context-menu", context_menu, "nameplate-image", gtk_image_new (), "nameplate-header", header, "nameplate-subheader", NULL, NULL); priv = PRIVATE (this); priv->agent = bookmark_agent_get_instance (BOOKMARK_STORE_SYSTEM); g_object_get (G_OBJECT (priv->agent), BOOKMARK_AGENT_STORE_STATUS_PROP, & priv->agent_status, NULL); priv->notify_signal_id = g_signal_connect ( G_OBJECT (priv->agent), "notify", G_CALLBACK (agent_notify_cb), this); actions = g_new0 (TileAction *, 2); TILE (this)->actions = actions; TILE (this)->n_actions = 2; menu_ctnr = GTK_CONTAINER (TILE (this)->context_menu); markup = g_markup_printf_escaped (_("<b>Open %s</b>"), header_txt); action = tile_action_new (TILE (this), open_trigger, markup, TILE_ACTION_OPENS_NEW_WINDOW); actions [SYSTEM_TILE_ACTION_OPEN] = action; g_free (markup); menu_item = GTK_WIDGET (tile_action_get_menu_item (action)); gtk_container_add (menu_ctnr, menu_item); TILE (this)->default_action = action; gtk_container_add (menu_ctnr, gtk_separator_menu_item_new ()); markup = g_markup_printf_escaped (_("Remove from System Items")); action = tile_action_new (TILE (this), remove_trigger, markup, 0); actions [SYSTEM_TILE_ACTION_REMOVE] = action; g_free (markup); menu_item = GTK_WIDGET (tile_action_get_menu_item (action)); gtk_container_add (menu_ctnr, menu_item); gtk_widget_show_all (GTK_WIDGET (TILE (this)->context_menu)); update_user_list_menu_item (this); priv->desktop_item = desktop_item; priv->image_id = g_strdup (image_id); load_image (this); /* Set up the mnemonic for the tile */ gtk_label_set_mnemonic_widget (GTK_LABEL (header), GTK_WIDGET (this)); /* Set up the accessible name for the tile */ accessible = gtk_widget_get_accessible (GTK_WIDGET (this)); if (header_txt) atk_object_set_name (accessible, header_txt); g_free (header_txt); g_free (image_id); g_free (uri); return GTK_WIDGET (this); }
static void test_ditem (const char *file) { MateDesktopItem *ditem; MateDesktopItemType type; const gchar *text; char *uri; char path[256]; ditem = mate_desktop_item_new_from_file (file, MATE_DESKTOP_ITEM_LOAD_ONLY_IF_EXISTS, NULL); if (ditem == NULL) { g_print ("File %s is not an existing ditem\n", file); return; } text = mate_desktop_item_get_location (ditem); g_print ("LOCATION: |%s|\n", text); type = mate_desktop_item_get_entry_type (ditem); g_print ("TYPE: |%u|\n", type); text = mate_desktop_item_get_string (ditem, MATE_DESKTOP_ITEM_TYPE); g_print ("TYPE(string): |%s|\n", text); text = mate_desktop_item_get_string (ditem, MATE_DESKTOP_ITEM_EXEC); g_print ("EXEC: |%s|\n", text); text = mate_desktop_item_get_string (ditem, MATE_DESKTOP_ITEM_ICON); g_print ("ICON: |%s|\n", text); text = mate_desktop_item_get_localestring (ditem, MATE_DESKTOP_ITEM_NAME); g_print ("NAME: |%s|\n", text); text = mate_desktop_item_get_localestring_lang (ditem, MATE_DESKTOP_ITEM_NAME, "cs_CZ"); g_print ("NAME(lang=cs_CZ): |%s|\n", text); text = mate_desktop_item_get_localestring_lang (ditem, MATE_DESKTOP_ITEM_NAME, "de"); g_print ("NAME(lang=de): |%s|\n", text); text = mate_desktop_item_get_localestring_lang (ditem, MATE_DESKTOP_ITEM_NAME, NULL); g_print ("NAME(lang=null): |%s|\n", text); text = mate_desktop_item_get_localestring (ditem, MATE_DESKTOP_ITEM_COMMENT); g_print ("COMMENT: |%s|\n", text); g_print ("Setting Name[de]=Neu gestzt! (I have no idea what that means)\n"); mate_desktop_item_set_localestring (ditem, MATE_DESKTOP_ITEM_NAME, "Neu gesetzt!"); getcwd (path, 255 - strlen ("/foo.desktop")); strcat (path, "/foo.desktop"); g_print ("Saving to foo.desktop\n"); uri = g_filename_to_uri (path, NULL, NULL); g_print ("URI: %s\n", uri); mate_desktop_item_save (ditem, uri, FALSE, NULL); g_free (uri); }