diff --git a/xed/xed-utils.c b/xed/xed-utils.c index 5fb81c1..984eeff 100644 --- a/xed/xed-utils.c +++ b/xed/xed-utils.c @@ -69,148 +69,143 @@ gboolean xed_utils_uri_has_file_scheme (const gchar *uri) { - GFile *gfile; - gboolean res; + GFile *gfile; + gboolean res; - gfile = g_file_new_for_uri (uri); - res = g_file_has_uri_scheme (gfile, "file"); + gfile = g_file_new_for_uri (uri); + res = g_file_has_uri_scheme (gfile, "file"); - g_object_unref (gfile); - return res; + g_object_unref (gfile); + return res; } /* FIXME: we should check for chained URIs */ gboolean xed_utils_uri_has_writable_scheme (const gchar *uri) { - GFile *gfile; - gchar *scheme; - GSList *writable_schemes; - gboolean res; + GFile *gfile; + gchar *scheme; + GSList *writable_schemes; + gboolean res; - gfile = g_file_new_for_uri (uri); - scheme = g_file_get_uri_scheme (gfile); + gfile = g_file_new_for_uri (uri); + scheme = g_file_get_uri_scheme (gfile); - g_return_val_if_fail (scheme != NULL, FALSE); + g_return_val_if_fail (scheme != NULL, FALSE); - g_object_unref (gfile); + g_object_unref (gfile); - writable_schemes = xed_prefs_manager_get_writable_vfs_schemes (); + writable_schemes = xed_prefs_manager_get_writable_vfs_schemes (); - /* CHECK: should we use g_ascii_strcasecmp? - Paolo (Nov 6, 2005) */ - res = (g_slist_find_custom (writable_schemes, - scheme, - (GCompareFunc)strcmp) != NULL); + /* CHECK: should we use g_ascii_strcasecmp? - Paolo (Nov 6, 2005) */ + res = (g_slist_find_custom (writable_schemes, scheme, (GCompareFunc)strcmp) != NULL); - g_slist_foreach (writable_schemes, (GFunc)g_free, NULL); - g_slist_free (writable_schemes); + g_slist_foreach (writable_schemes, (GFunc)g_free, NULL); + g_slist_free (writable_schemes); - g_free (scheme); + g_free (scheme); - return res; + return res; } static void -widget_get_origin (GtkWidget *widget, gint *x, gint *y) +widget_get_origin (GtkWidget *widget, + gint *x, + gint *y) { - GdkWindow *window; + GdkWindow *window; - window = gtk_widget_get_window (widget); - gdk_window_get_origin (window, x, y); + window = gtk_widget_get_window (widget); + gdk_window_get_origin (window, x, y); } void xed_utils_menu_position_under_widget (GtkMenu *menu, - gint *x, - gint *y, - gboolean *push_in, - gpointer user_data) + gint *x, + gint *y, + gboolean *push_in, + gpointer user_data) { - GtkWidget *widget; - GtkRequisition requisition; - GtkAllocation allocation; + GtkWidget *widget; + GtkRequisition requisition; + GtkAllocation allocation; - widget = GTK_WIDGET (user_data); - widget_get_origin (widget, x, y); + widget = GTK_WIDGET (user_data); + widget_get_origin (widget, x, y); - gtk_widget_get_preferred_size (GTK_WIDGET (menu), NULL, &requisition); + gtk_widget_get_preferred_size (GTK_WIDGET (menu), NULL, &requisition); - gtk_widget_get_allocation (widget, &allocation); + gtk_widget_get_allocation (widget, &allocation); - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - { - *x += allocation.x + allocation.width - requisition.width; - } - else - { - *x += allocation.x; - } + if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) + { + *x += allocation.x + allocation.width - requisition.width; + } + else + { + *x += allocation.x; + } - *y += allocation.y + allocation.height; + *y += allocation.y + allocation.height; - *push_in = TRUE; + *push_in = TRUE; } void xed_utils_menu_position_under_tree_view (GtkMenu *menu, - gint *x, - gint *y, - gboolean *push_in, - gpointer user_data) + gint *x, + gint *y, + gboolean *push_in, + gpointer user_data) { - GtkTreeView *tree = GTK_TREE_VIEW (user_data); - GtkTreeModel *model; - GtkTreeSelection *selection; - GtkTreeIter iter; + GtkTreeView *tree = GTK_TREE_VIEW (user_data); + GtkTreeModel *model; + GtkTreeSelection *selection; + GtkTreeIter iter; - model = gtk_tree_view_get_model (tree); - g_return_if_fail (model != NULL); + model = gtk_tree_view_get_model (tree); + g_return_if_fail (model != NULL); - selection = gtk_tree_view_get_selection (tree); - g_return_if_fail (selection != NULL); + selection = gtk_tree_view_get_selection (tree); + g_return_if_fail (selection != NULL); - if (gtk_tree_selection_get_selected (selection, NULL, &iter)) - { - GtkTreePath *path; - GdkRectangle rect; + if (gtk_tree_selection_get_selected (selection, NULL, &iter)) + { + GtkTreePath *path; + GdkRectangle rect; - widget_get_origin (GTK_WIDGET (tree), x, y); + widget_get_origin (GTK_WIDGET (tree), x, y); - path = gtk_tree_model_get_path (model, &iter); - gtk_tree_view_get_cell_area (tree, path, - gtk_tree_view_get_column (tree, 0), /* FIXME 0 for RTL ? */ - &rect); - gtk_tree_path_free (path); + path = gtk_tree_model_get_path (model, &iter); + gtk_tree_view_get_cell_area (tree, path, + gtk_tree_view_get_column (tree, 0), /* FIXME 0 for RTL ? */ + &rect); + gtk_tree_path_free (path); - *x += rect.x; - *y += rect.y + rect.height; + *x += rect.x; + *y += rect.y + rect.height; - if (gtk_widget_get_direction (GTK_WIDGET (tree)) == GTK_TEXT_DIR_RTL) - { - GtkRequisition requisition; - gtk_widget_get_preferred_size (GTK_WIDGET (menu), NULL, &requisition); + if (gtk_widget_get_direction (GTK_WIDGET (tree)) == GTK_TEXT_DIR_RTL) + { + GtkRequisition requisition; + gtk_widget_get_preferred_size (GTK_WIDGET (menu), NULL, &requisition); - *x += rect.width - requisition.width; - } - } - else - { - /* no selection -> regular "under widget" positioning */ - xed_utils_menu_position_under_widget (menu, - x, y, push_in, - tree); - } + *x += rect.width - requisition.width; + } + } + else + { + /* no selection -> regular "under widget" positioning */ + xed_utils_menu_position_under_widget (menu, x, y, push_in, tree); + } } /* FIXME: remove this with gtk 2.12, it has gdk_color_to_string */ gchar * xed_gdk_color_to_string (GdkColor color) { - return g_strdup_printf ("#%04x%04x%04x", - color.red, - color.green, - color.blue); + return g_strdup_printf ("#%04x%04x%04x", color.red, color.green, color.blue); } /** @@ -222,16 +217,14 @@ xed_gdk_color_to_string (GdkColor color) */ GtkWidget * xed_gtk_button_new_with_stock_icon (const gchar *label, - const gchar *stock_id) + const gchar *stock_id) { - GtkWidget *button; + GtkWidget *button; - button = gtk_button_new_with_mnemonic (label); - gtk_button_set_image (GTK_BUTTON (button), - gtk_image_new_from_stock (stock_id, - GTK_ICON_SIZE_BUTTON)); + button = gtk_button_new_with_mnemonic (label); + gtk_button_set_image (GTK_BUTTON (button), gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_BUTTON)); - return button; + return button; } /** @@ -245,67 +238,72 @@ xed_gtk_button_new_with_stock_icon (const gchar *label, */ GtkWidget * xed_dialog_add_button (GtkDialog *dialog, - const gchar *text, - const gchar *stock_id, - gint response_id) + const gchar *text, + const gchar *stock_id, + gint response_id) { - GtkWidget *button; + GtkWidget *button; - g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL); - g_return_val_if_fail (text != NULL, NULL); - g_return_val_if_fail (stock_id != NULL, NULL); + g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL); + g_return_val_if_fail (text != NULL, NULL); + g_return_val_if_fail (stock_id != NULL, NULL); - button = xed_gtk_button_new_with_stock_icon (text, stock_id); - g_return_val_if_fail (button != NULL, NULL); + button = xed_gtk_button_new_with_stock_icon (text, stock_id); + g_return_val_if_fail (button != NULL, NULL); - gtk_widget_set_can_default (button, TRUE); + gtk_widget_set_can_default (button, TRUE); - gtk_widget_show (button); + gtk_widget_show (button); - gtk_dialog_add_action_widget (dialog, button, response_id); + gtk_dialog_add_action_widget (dialog, button, response_id); - return button; + return button; } /* * n: len of the string in bytes */ gboolean -g_utf8_caselessnmatch (const char *s1, const char *s2, gssize n1, gssize n2) +g_utf8_caselessnmatch (const char *s1, + const char *s2, + gssize n1, + gssize n2) { - gchar *casefold; - gchar *normalized_s1; - gchar *normalized_s2; - gint len_s1; - gint len_s2; - gboolean ret = FALSE; + gchar *casefold; + gchar *normalized_s1; + gchar *normalized_s2; + gint len_s1; + gint len_s2; + gboolean ret = FALSE; - g_return_val_if_fail (s1 != NULL, FALSE); - g_return_val_if_fail (s2 != NULL, FALSE); - g_return_val_if_fail (n1 > 0, FALSE); - g_return_val_if_fail (n2 > 0, FALSE); + g_return_val_if_fail (s1 != NULL, FALSE); + g_return_val_if_fail (s2 != NULL, FALSE); + g_return_val_if_fail (n1 > 0, FALSE); + g_return_val_if_fail (n2 > 0, FALSE); - casefold = g_utf8_casefold (s1, n1); - normalized_s1 = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD); - g_free (casefold); + casefold = g_utf8_casefold (s1, n1); + normalized_s1 = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD); + g_free (casefold); - casefold = g_utf8_casefold (s2, n2); - normalized_s2 = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD); - g_free (casefold); + casefold = g_utf8_casefold (s2, n2); + normalized_s2 = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD); + g_free (casefold); - len_s1 = strlen (normalized_s1); - len_s2 = strlen (normalized_s2); + len_s1 = strlen (normalized_s1); + len_s2 = strlen (normalized_s2); - if (len_s1 < len_s2) - goto finally_2; + if (len_s1 < len_s2) + { + goto finally_2; + } - ret = (strncmp (normalized_s1, normalized_s2, len_s2) == 0); + ret = (strncmp (normalized_s1, normalized_s2, len_s2) == 0); finally_2: - g_free (normalized_s1); - g_free (normalized_s2); + g_free (normalized_s1); + g_free (normalized_s2); - return ret; + return ret; } /** @@ -318,22 +316,28 @@ finally_2: * for a specified gtk widget. */ void -xed_utils_set_atk_name_description (GtkWidget *widget, - const gchar *name, - const gchar *description) +xed_utils_set_atk_name_description (GtkWidget *widget, + const gchar *name, + const gchar *description) { - AtkObject *aobj; + AtkObject *aobj; - aobj = gtk_widget_get_accessible (widget); + aobj = gtk_widget_get_accessible (widget); - if (!(GTK_IS_ACCESSIBLE (aobj))) - return; + if (!(GTK_IS_ACCESSIBLE (aobj))) + { + return; + } - if(name) - atk_object_set_name (aobj, name); + if (name) + { + atk_object_set_name (aobj, name); + } - if(description) - atk_object_set_description (aobj, description); + if (description) + { + atk_object_set_description (aobj, description); + } } /** @@ -346,219 +350,230 @@ xed_utils_set_atk_name_description (GtkWidget *widget, * between 2 specified widgets. */ void -xed_utils_set_atk_relation (GtkWidget *obj1, - GtkWidget *obj2, - AtkRelationType rel_type ) +xed_utils_set_atk_relation (GtkWidget *obj1, + GtkWidget *obj2, + AtkRelationType rel_type ) { - AtkObject *atk_obj1, *atk_obj2; - AtkRelationSet *relation_set; - AtkObject *targets[1]; - AtkRelation *relation; + AtkObject *atk_obj1, *atk_obj2; + AtkRelationSet *relation_set; + AtkObject *targets[1]; + AtkRelation *relation; - atk_obj1 = gtk_widget_get_accessible (obj1); - atk_obj2 = gtk_widget_get_accessible (obj2); + atk_obj1 = gtk_widget_get_accessible (obj1); + atk_obj2 = gtk_widget_get_accessible (obj2); - if (!(GTK_IS_ACCESSIBLE (atk_obj1)) || !(GTK_IS_ACCESSIBLE (atk_obj2))) - return; + if (!(GTK_IS_ACCESSIBLE (atk_obj1)) || !(GTK_IS_ACCESSIBLE (atk_obj2))) + { + return; + } - relation_set = atk_object_ref_relation_set (atk_obj1); - targets[0] = atk_obj2; + relation_set = atk_object_ref_relation_set (atk_obj1); + targets[0] = atk_obj2; - relation = atk_relation_new (targets, 1, rel_type); - atk_relation_set_add (relation_set, relation); + relation = atk_relation_new (targets, 1, rel_type); + atk_relation_set_add (relation_set, relation); - g_object_unref (G_OBJECT (relation)); + g_object_unref (G_OBJECT (relation)); } gboolean xed_utils_uri_exists (const gchar* text_uri) { - GFile *gfile; - gboolean res; + GFile *gfile; + gboolean res; - g_return_val_if_fail (text_uri != NULL, FALSE); + g_return_val_if_fail (text_uri != NULL, FALSE); - xed_debug_message (DEBUG_UTILS, "text_uri: %s", text_uri); + xed_debug_message (DEBUG_UTILS, "text_uri: %s", text_uri); - gfile = g_file_new_for_uri (text_uri); - res = g_file_query_exists (gfile, NULL); + gfile = g_file_new_for_uri (text_uri); + res = g_file_query_exists (gfile, NULL); - g_object_unref (gfile); + g_object_unref (gfile); - xed_debug_message (DEBUG_UTILS, res ? "TRUE" : "FALSE"); + xed_debug_message (DEBUG_UTILS, res ? "TRUE" : "FALSE"); - return res; + return res; } gchar * xed_utils_escape_search_text (const gchar* text) { - GString *str; - gint length; - const gchar *p; - const gchar *end; + GString *str; + gint length; + const gchar *p; + const gchar *end; - if (text == NULL) - return NULL; + if (text == NULL) + { + return NULL; + } - xed_debug_message (DEBUG_SEARCH, "Text: %s", text); + xed_debug_message (DEBUG_SEARCH, "Text: %s", text); - length = strlen (text); + length = strlen (text); - /* no escape when typing. - * The short circuit works only for ascii, but we only - * care about not escaping a single '\' */ - if (length == 1) - return g_strdup (text); + /* no escape when typing. + * The short circuit works only for ascii, but we only + * care about not escaping a single '\' */ + if (length == 1) + { + return g_strdup (text); + } - str = g_string_new (""); + str = g_string_new (""); - p = text; - end = text + length; + p = text; + end = text + length; - while (p != end) - { - const gchar *next; - next = g_utf8_next_char (p); + while (p != end) + { + const gchar *next; + next = g_utf8_next_char (p); - switch (*p) - { - case '\n': - g_string_append (str, "\\n"); - break; - case '\r': - g_string_append (str, "\\r"); - break; - case '\t': - g_string_append (str, "\\t"); - break; - case '\\': - g_string_append (str, "\\\\"); - break; - default: - g_string_append_len (str, p, next - p); - break; - } + switch (*p) + { + case '\n': + g_string_append (str, "\\n"); + break; + case '\r': + g_string_append (str, "\\r"); + break; + case '\t': + g_string_append (str, "\\t"); + break; + case '\\': + g_string_append (str, "\\\\"); + break; + default: + g_string_append_len (str, p, next - p); + break; + } - p = next; - } + p = next; + } - return g_string_free (str, FALSE); + return g_string_free (str, FALSE); } gchar * xed_utils_unescape_search_text (const gchar *text) { - GString *str; - gint length; - gboolean drop_prev = FALSE; - const gchar *cur; - const gchar *end; - const gchar *prev; + GString *str; + gint length; + gboolean drop_prev = FALSE; + const gchar *cur; + const gchar *end; + const gchar *prev; - if (text == NULL) - return NULL; + if (text == NULL) + { + return NULL; + } - length = strlen (text); + length = strlen (text); - str = g_string_new (""); + str = g_string_new (""); - cur = text; - end = text + length; - prev = NULL; + cur = text; + end = text + length; + prev = NULL; - while (cur != end) - { - const gchar *next; - next = g_utf8_next_char (cur); + while (cur != end) + { + const gchar *next; + next = g_utf8_next_char (cur); - if (prev && (*prev == '\\')) - { - switch (*cur) - { - case 'n': - str = g_string_append (str, "\n"); - break; - case 'r': - str = g_string_append (str, "\r"); - break; - case 't': - str = g_string_append (str, "\t"); - break; - case '\\': - str = g_string_append (str, "\\"); - drop_prev = TRUE; - break; - default: - str = g_string_append (str, "\\"); - str = g_string_append_len (str, cur, next - cur); - break; - } - } - else if (*cur != '\\') - { - str = g_string_append_len (str, cur, next - cur); - } - else if ((next == end) && (*cur == '\\')) - { - str = g_string_append (str, "\\"); - } + if (prev && (*prev == '\\')) + { + switch (*cur) + { + case 'n': + str = g_string_append (str, "\n"); + break; + case 'r': + str = g_string_append (str, "\r"); + break; + case 't': + str = g_string_append (str, "\t"); + break; + case '\\': + str = g_string_append (str, "\\"); + drop_prev = TRUE; + break; + default: + str = g_string_append (str, "\\"); + str = g_string_append_len (str, cur, next - cur); + break; + } + } + else if (*cur != '\\') + { + str = g_string_append_len (str, cur, next - cur); + } + else if ((next == end) && (*cur == '\\')) + { + str = g_string_append (str, "\\"); + } - if (!drop_prev) - { - prev = cur; - } - else - { - prev = NULL; - drop_prev = FALSE; - } + if (!drop_prev) + { + prev = cur; + } + else + { + prev = NULL; + drop_prev = FALSE; + } - cur = next; - } + cur = next; + } - return g_string_free (str, FALSE); + return g_string_free (str, FALSE); } void -xed_warning (GtkWindow *parent, const gchar *format, ...) +xed_warning (GtkWindow *parent, + const gchar *format, + ...) { - va_list args; - gchar *str; - GtkWidget *dialog; - GtkWindowGroup *wg = NULL; + va_list args; + gchar *str; + GtkWidget *dialog; + GtkWindowGroup *wg = NULL; - g_return_if_fail (format != NULL); + g_return_if_fail (format != NULL); - if (parent != NULL) - wg = gtk_window_get_group (parent); + if (parent != NULL) + { + wg = gtk_window_get_group (parent); + } - va_start (args, format); - str = g_strdup_vprintf (format, args); - va_end (args); + va_start (args, format); + str = g_strdup_vprintf (format, args); + va_end (args); - dialog = gtk_message_dialog_new_with_markup ( - parent, - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_OK, - "%s", str); + dialog = gtk_message_dialog_new_with_markup (parent, + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + "%s", str); - g_free (str); + g_free (str); - if (wg != NULL) - gtk_window_group_add_window (wg, GTK_WINDOW (dialog)); + if (wg != NULL) + { + gtk_window_group_add_window (wg, GTK_WINDOW (dialog)); + } - gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); - gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); + gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); - g_signal_connect (G_OBJECT (dialog), - "response", - G_CALLBACK (gtk_widget_destroy), - NULL); + g_signal_connect (G_OBJECT (dialog), "response", + G_CALLBACK (gtk_widget_destroy), NULL); - gtk_widget_show (dialog); + gtk_widget_show (dialog); } /* @@ -566,155 +581,161 @@ xed_warning (GtkWindow *parent, const gchar *format, ...) */ gchar * xed_utils_escape_underscores (const gchar* text, - gssize length) + gssize length) { - GString *str; - const gchar *p; - const gchar *end; + GString *str; + const gchar *p; + const gchar *end; - g_return_val_if_fail (text != NULL, NULL); + g_return_val_if_fail (text != NULL, NULL); - if (length < 0) - length = strlen (text); + if (length < 0) + { + length = strlen (text); + } - str = g_string_sized_new (length); + str = g_string_sized_new (length); - p = text; - end = text + length; + p = text; + end = text + length; - while (p != end) - { - const gchar *next; - next = g_utf8_next_char (p); + while (p != end) + { + const gchar *next; + next = g_utf8_next_char (p); - switch (*p) - { - case '_': - g_string_append (str, "__"); - break; - default: - g_string_append_len (str, p, next - p); - break; - } + switch (*p) + { + case '_': + g_string_append (str, "__"); + break; + default: + g_string_append_len (str, p, next - p); + break; + } - p = next; - } + p = next; + } - return g_string_free (str, FALSE); + return g_string_free (str, FALSE); } /* the following functions are taken from eel */ static gchar * xed_utils_str_truncate (const gchar *string, - guint truncate_length, - gboolean middle) + guint truncate_length, + gboolean middle) { - GString *truncated; - guint length; - guint n_chars; - guint num_left_chars; - guint right_offset; - guint delimiter_length; - const gchar *delimiter = "\342\200\246"; + GString *truncated; + guint length; + guint n_chars; + guint num_left_chars; + guint right_offset; + guint delimiter_length; + const gchar *delimiter = "\342\200\246"; - g_return_val_if_fail (string != NULL, NULL); + g_return_val_if_fail (string != NULL, NULL); - length = strlen (string); + length = strlen (string); - g_return_val_if_fail (g_utf8_validate (string, length, NULL), NULL); + g_return_val_if_fail (g_utf8_validate (string, length, NULL), NULL); - /* It doesnt make sense to truncate strings to less than - * the size of the delimiter plus 2 characters (one on each - * side) - */ - delimiter_length = g_utf8_strlen (delimiter, -1); - if (truncate_length < (delimiter_length + 2)) { - return g_strdup (string); - } + /* It doesnt make sense to truncate strings to less than + * the size of the delimiter plus 2 characters (one on each + * side) + */ + delimiter_length = g_utf8_strlen (delimiter, -1); + if (truncate_length < (delimiter_length + 2)) + { + return g_strdup (string); + } - n_chars = g_utf8_strlen (string, length); + n_chars = g_utf8_strlen (string, length); - /* Make sure the string is not already small enough. */ - if (n_chars <= truncate_length) { - return g_strdup (string); - } + /* Make sure the string is not already small enough. */ + if (n_chars <= truncate_length) + { + return g_strdup (string); + } - /* Find the 'middle' where the truncation will occur. */ - if (middle) - { - num_left_chars = (truncate_length - delimiter_length) / 2; - right_offset = n_chars - truncate_length + num_left_chars + delimiter_length; + /* Find the 'middle' where the truncation will occur. */ + if (middle) + { + num_left_chars = (truncate_length - delimiter_length) / 2; + right_offset = n_chars - truncate_length + num_left_chars + delimiter_length; - truncated = g_string_new_len (string, - g_utf8_offset_to_pointer (string, num_left_chars) - string); - g_string_append (truncated, delimiter); - g_string_append (truncated, g_utf8_offset_to_pointer (string, right_offset)); - } - else - { - num_left_chars = truncate_length - delimiter_length; - truncated = g_string_new_len (string, - g_utf8_offset_to_pointer (string, num_left_chars) - string); - g_string_append (truncated, delimiter); - } + truncated = g_string_new_len (string, g_utf8_offset_to_pointer (string, num_left_chars) - string); + g_string_append (truncated, delimiter); + g_string_append (truncated, g_utf8_offset_to_pointer (string, right_offset)); + } + else + { + num_left_chars = truncate_length - delimiter_length; + truncated = g_string_new_len (string, g_utf8_offset_to_pointer (string, num_left_chars) - string); + g_string_append (truncated, delimiter); + } - return g_string_free (truncated, FALSE); + return g_string_free (truncated, FALSE); } gchar * xed_utils_str_middle_truncate (const gchar *string, - guint truncate_length) + guint truncate_length) { - return xed_utils_str_truncate (string, truncate_length, TRUE); + return xed_utils_str_truncate (string, truncate_length, TRUE); } gchar * xed_utils_str_end_truncate (const gchar *string, - guint truncate_length) + guint truncate_length) { - return xed_utils_str_truncate (string, truncate_length, FALSE); + return xed_utils_str_truncate (string, truncate_length, FALSE); } gchar * xed_utils_make_valid_utf8 (const char *name) { - GString *string; - const char *remainder, *invalid; - int remaining_bytes, valid_bytes; + GString *string; + const char *remainder, *invalid; + int remaining_bytes, valid_bytes; - g_return_val_if_fail (name != NULL, NULL); + g_return_val_if_fail (name != NULL, NULL); - string = NULL; - remainder = name; - remaining_bytes = strlen (name); + string = NULL; + remainder = name; + remaining_bytes = strlen (name); - while (remaining_bytes != 0) { - if (g_utf8_validate (remainder, remaining_bytes, &invalid)) { - break; - } - valid_bytes = invalid - remainder; + while (remaining_bytes != 0) + { + if (g_utf8_validate (remainder, remaining_bytes, &invalid)) + { + break; + } + valid_bytes = invalid - remainder; - if (string == NULL) { - string = g_string_sized_new (remaining_bytes); - } - g_string_append_len (string, remainder, valid_bytes); - /* append U+FFFD REPLACEMENT CHARACTER */ - g_string_append (string, "\357\277\275"); + if (string == NULL) + { + string = g_string_sized_new (remaining_bytes); + } + g_string_append_len (string, remainder, valid_bytes); + /* append U+FFFD REPLACEMENT CHARACTER */ + g_string_append (string, "\357\277\275"); - remaining_bytes -= valid_bytes + 1; - remainder = invalid + 1; - } + remaining_bytes -= valid_bytes + 1; + remainder = invalid + 1; + } - if (string == NULL) { - return g_strdup (name); - } + if (string == NULL) + { + return g_strdup (name); + } - g_string_append (string, remainder); + g_string_append (string, remainder); - g_assert (g_utf8_validate (string->str, -1, NULL)); + g_assert (g_utf8_validate (string->str, -1, NULL)); - return g_string_free (string, FALSE); + return g_string_free (string, FALSE); } /** @@ -725,27 +746,27 @@ xed_utils_make_valid_utf8 (const char *name) gchar * xed_utils_uri_get_dirname (const gchar *uri) { - gchar *res; - gchar *str; + gchar *res; + gchar *str; - g_return_val_if_fail (uri != NULL, NULL); + g_return_val_if_fail (uri != NULL, NULL); - /* CHECK: does it work with uri chaining? - Paolo */ - str = g_path_get_dirname (uri); - g_return_val_if_fail (str != NULL, g_strdup (".")); + /* CHECK: does it work with uri chaining? - Paolo */ + str = g_path_get_dirname (uri); + g_return_val_if_fail (str != NULL, g_strdup (".")); - if ((strlen (str) == 1) && (*str == '.')) - { - g_free (str); + if ((strlen (str) == 1) && (*str == '.')) + { + g_free (str); - return NULL; - } + return NULL; + } - res = xed_utils_replace_home_dir_with_tilde (str); + res = xed_utils_replace_home_dir_with_tilde (str); - g_free (str); + g_free (str); - return res; + return res; } /** @@ -762,109 +783,113 @@ xed_utils_uri_get_dirname (const gchar *uri) gchar * xed_utils_location_get_dirname_for_display (GFile *location) { - gchar *uri; - gchar *res; - GMount *mount; + gchar *uri; + gchar *res; + GMount *mount; - g_return_val_if_fail (location != NULL, NULL); + g_return_val_if_fail (location != NULL, NULL); - /* we use the parse name, that is either the local path - * or an uri but which is utf8 safe */ - uri = g_file_get_parse_name (location); + /* we use the parse name, that is either the local path + * or an uri but which is utf8 safe */ + uri = g_file_get_parse_name (location); - /* FIXME: this is sync... is it a problem? */ - mount = g_file_find_enclosing_mount (location, NULL, NULL); - if (mount != NULL) - { - gchar *mount_name; - gchar *path = NULL; - gchar *dirname; + /* FIXME: this is sync... is it a problem? */ + mount = g_file_find_enclosing_mount (location, NULL, NULL); + if (mount != NULL) + { + gchar *mount_name; + gchar *path = NULL; + gchar *dirname; - mount_name = g_mount_get_name (mount); - g_object_unref (mount); + mount_name = g_mount_get_name (mount); + g_object_unref (mount); - /* obtain the "path" part of the uri */ - xed_utils_decode_uri (uri, - NULL, NULL, - NULL, NULL, - &path); + /* obtain the "path" part of the uri */ + xed_utils_decode_uri (uri, + NULL, NULL, + NULL, NULL, + &path); - if (path == NULL) - { - dirname = xed_utils_uri_get_dirname (uri); - } - else - { - dirname = xed_utils_uri_get_dirname (path); - } + if (path == NULL) + { + dirname = xed_utils_uri_get_dirname (uri); + } + else + { + dirname = xed_utils_uri_get_dirname (path); + } - if (dirname == NULL || strcmp (dirname, ".") == 0) - { - res = mount_name; - } - else - { - res = g_strdup_printf ("%s %s", mount_name, dirname); - g_free (mount_name); - } + if (dirname == NULL || strcmp (dirname, ".") == 0) + { + res = mount_name; + } + else + { + res = g_strdup_printf ("%s %s", mount_name, dirname); + g_free (mount_name); + } - g_free (path); - g_free (dirname); - } - else - { - /* fallback for local files or uris without mounts */ - res = xed_utils_uri_get_dirname (uri); - } + g_free (path); + g_free (dirname); + } + else + { + /* fallback for local files or uris without mounts */ + res = xed_utils_uri_get_dirname (uri); + } - g_free (uri); + g_free (uri); - return res; + return res; } gchar * xed_utils_replace_home_dir_with_tilde (const gchar *uri) { - gchar *tmp; - gchar *home; + gchar *tmp; + gchar *home; - g_return_val_if_fail (uri != NULL, NULL); + g_return_val_if_fail (uri != NULL, NULL); - /* Note that g_get_home_dir returns a const string */ - tmp = (gchar *)g_get_home_dir (); + /* Note that g_get_home_dir returns a const string */ + tmp = (gchar *)g_get_home_dir (); - if (tmp == NULL) - return g_strdup (uri); + if (tmp == NULL) + { + return g_strdup (uri); + } - home = g_filename_to_utf8 (tmp, -1, NULL, NULL, NULL); - if (home == NULL) - return g_strdup (uri); + home = g_filename_to_utf8 (tmp, -1, NULL, NULL, NULL); + if (home == NULL) + { + return g_strdup (uri); + } - if (strcmp (uri, home) == 0) - { - g_free (home); + if (strcmp (uri, home) == 0) + { + g_free (home); - return g_strdup ("~"); - } + return g_strdup ("~"); + } - tmp = home; - home = g_strdup_printf ("%s/", tmp); - g_free (tmp); + tmp = home; + home = g_strdup_printf ("%s/", tmp); + g_free (tmp); - if (g_str_has_prefix (uri, home)) - { - gchar *res; + if (g_str_has_prefix (uri, home)) + { + gchar *res; - res = g_strdup_printf ("~/%s", uri + strlen (home)); + res = g_strdup_printf ("~/%s", uri + strlen (home)); - g_free (home); + g_free (home); - return res; - } + return res; + } - g_free (home); + g_free (home); - return g_strdup (uri); + return g_strdup (uri); } /* the following two functions are courtesy of galeon */ @@ -883,40 +908,44 @@ guint xed_utils_get_current_workspace (GdkScreen *screen) { #ifdef GDK_WINDOWING_X11 - GdkWindow *root_win; - GdkDisplay *display; - Atom type; - gint format; - gulong nitems; - gulong bytes_after; - guint *current_desktop; - gint err, result; - guint ret = 0; + GdkWindow *root_win; + GdkDisplay *display; + Atom type; + gint format; + gulong nitems; + gulong bytes_after; + guint *current_desktop; + gint err, result; + guint ret = 0; - g_return_val_if_fail (GDK_IS_SCREEN (screen), 0); + g_return_val_if_fail (GDK_IS_SCREEN (screen), 0); - root_win = gdk_screen_get_root_window (screen); - display = gdk_screen_get_display (screen); + root_win = gdk_screen_get_root_window (screen); + display = gdk_screen_get_display (screen); - gdk_error_trap_push (); - result = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (root_win), - gdk_x11_get_xatom_by_name_for_display (display, "_NET_CURRENT_DESKTOP"), - 0, G_MAXLONG, False, XA_CARDINAL, &type, &format, &nitems, - &bytes_after, (gpointer) ¤t_desktop); - err = gdk_error_trap_pop (); + gdk_error_trap_push (); + result = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (root_win), + gdk_x11_get_xatom_by_name_for_display (display, "_NET_CURRENT_DESKTOP"), + 0, G_MAXLONG, False, XA_CARDINAL, &type, &format, &nitems, + &bytes_after, (gpointer) ¤t_desktop); + err = gdk_error_trap_pop (); - if (err != Success || result != Success) - return ret; + if (err != Success || result != Success) + { + return ret; + } - if (type == XA_CARDINAL && format == 32 && nitems > 0) - ret = current_desktop[0]; + if (type == XA_CARDINAL && format == 32 && nitems > 0) + { + ret = current_desktop[0]; + } - XFree (current_desktop); - return ret; + XFree (current_desktop); + return ret; #else - /* FIXME: on mac etc proably there are native APIs - * to get the current workspace etc */ - return 0; + /* FIXME: on mac etc proably there are native APIs + * to get the current workspace etc */ + return 0; #endif } @@ -933,41 +962,45 @@ guint xed_utils_get_window_workspace (GtkWindow *gtkwindow) { #ifdef GDK_WINDOWING_X11 - GdkWindow *window; - GdkDisplay *display; - Atom type; - gint format; - gulong nitems; - gulong bytes_after; - guint *workspace; - gint err, result; - guint ret = XED_ALL_WORKSPACES; + GdkWindow *window; + GdkDisplay *display; + Atom type; + gint format; + gulong nitems; + gulong bytes_after; + guint *workspace; + gint err, result; + guint ret = XED_ALL_WORKSPACES; - g_return_val_if_fail (GTK_IS_WINDOW (gtkwindow), 0); - g_return_val_if_fail (gtk_widget_get_realized (GTK_WIDGET (gtkwindow)), 0); + g_return_val_if_fail (GTK_IS_WINDOW (gtkwindow), 0); + g_return_val_if_fail (gtk_widget_get_realized (GTK_WIDGET (gtkwindow)), 0); - window = gtk_widget_get_window (GTK_WIDGET (gtkwindow)); - display = gdk_window_get_display (window); + window = gtk_widget_get_window (GTK_WIDGET (gtkwindow)); + display = gdk_window_get_display (window); - gdk_error_trap_push (); - result = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window), - gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_DESKTOP"), - 0, G_MAXLONG, False, XA_CARDINAL, &type, &format, &nitems, - &bytes_after, (gpointer) &workspace); - err = gdk_error_trap_pop (); + gdk_error_trap_push (); + result = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window), + gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_DESKTOP"), + 0, G_MAXLONG, False, XA_CARDINAL, &type, &format, &nitems, + &bytes_after, (gpointer) &workspace); + err = gdk_error_trap_pop (); - if (err != Success || result != Success) - return ret; + if (err != Success || result != Success) + { + return ret; + } - if (type == XA_CARDINAL && format == 32 && nitems > 0) - ret = workspace[0]; + if (type == XA_CARDINAL && format == 32 && nitems > 0) + { + ret = workspace[0]; + } - XFree (workspace); - return ret; + XFree (workspace); + return ret; #else - /* FIXME: on mac etc proably there are native APIs - * to get the current workspace etc */ - return 0; + /* FIXME: on mac etc proably there are native APIs + * to get the current workspace etc */ + return 0; #endif } @@ -982,144 +1015,160 @@ xed_utils_get_window_workspace (GtkWindow *gtkwindow) */ void xed_utils_get_current_viewport (GdkScreen *screen, - gint *x, - gint *y) + gint *x, + gint *y) { #ifdef GDK_WINDOWING_X11 - GdkWindow *root_win; - GdkDisplay *display; - Atom type; - gint format; - gulong nitems; - gulong bytes_after; - gulong *coordinates; - gint err, result; + GdkWindow *root_win; + GdkDisplay *display; + Atom type; + gint format; + gulong nitems; + gulong bytes_after; + gulong *coordinates; + gint err, result; - g_return_if_fail (GDK_IS_SCREEN (screen)); - g_return_if_fail (x != NULL && y != NULL); + g_return_if_fail (GDK_IS_SCREEN (screen)); + g_return_if_fail (x != NULL && y != NULL); - /* Default values for the viewport origin */ - *x = 0; - *y = 0; + /* Default values for the viewport origin */ + *x = 0; + *y = 0; - root_win = gdk_screen_get_root_window (screen); - display = gdk_screen_get_display (screen); + root_win = gdk_screen_get_root_window (screen); + display = gdk_screen_get_display (screen); - gdk_error_trap_push (); - result = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (root_win), - gdk_x11_get_xatom_by_name_for_display (display, "_NET_DESKTOP_VIEWPORT"), - 0, G_MAXLONG, False, XA_CARDINAL, &type, &format, &nitems, - &bytes_after, (void*) &coordinates); - err = gdk_error_trap_pop (); + gdk_error_trap_push (); + result = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (root_win), + gdk_x11_get_xatom_by_name_for_display (display, "_NET_DESKTOP_VIEWPORT"), + 0, G_MAXLONG, False, XA_CARDINAL, &type, &format, &nitems, + &bytes_after, (void*) &coordinates); + err = gdk_error_trap_pop (); - if (err != Success || result != Success) - return; + if (err != Success || result != Success) + { + return; + } - if (type != XA_CARDINAL || format != 32 || nitems < 2) - { - XFree (coordinates); - return; - } + if (type != XA_CARDINAL || format != 32 || nitems < 2) + { + XFree (coordinates); + return; + } - *x = coordinates[0]; - *y = coordinates[1]; - XFree (coordinates); + *x = coordinates[0]; + *y = coordinates[1]; + XFree (coordinates); #else - /* FIXME: on mac etc proably there are native APIs - * to get the current workspace etc */ - *x = 0; - *y = 0; + /* FIXME: on mac etc proably there are native APIs + * to get the current workspace etc */ + *x = 0; + *y = 0; #endif } static gboolean is_valid_scheme_character (gchar c) { - return g_ascii_isalnum (c) || c == '+' || c == '-' || c == '.'; + return g_ascii_isalnum (c) || c == '+' || c == '-' || c == '.'; } static gboolean has_valid_scheme (const gchar *uri) { - const gchar *p; + const gchar *p; - p = uri; + p = uri; - if (!is_valid_scheme_character (*p)) { - return FALSE; - } + if (!is_valid_scheme_character (*p)) + { + return FALSE; + } - do { - p++; - } while (is_valid_scheme_character (*p)); + do + { + p++; + } while (is_valid_scheme_character (*p)); - return *p == ':'; + return *p == ':'; } gboolean xed_utils_is_valid_uri (const gchar *uri) { - const guchar *p; + const guchar *p; - if (uri == NULL) - return FALSE; + if (uri == NULL) + { + return FALSE; + } - if (!has_valid_scheme (uri)) - return FALSE; + if (!has_valid_scheme (uri)) + { + return FALSE; + } - /* We expect to have a fully valid set of characters */ - for (p = (const guchar *)uri; *p; p++) { - if (*p == '%') - { - ++p; - if (!g_ascii_isxdigit (*p)) - return FALSE; + /* We expect to have a fully valid set of characters */ + for (p = (const guchar *)uri; *p; p++) + { + if (*p == '%') + { + ++p; + if (!g_ascii_isxdigit (*p)) + { + return FALSE; + } - ++p; - if (!g_ascii_isxdigit (*p)) - return FALSE; - } - else - { - if (*p <= 32 || *p >= 128) - return FALSE; - } - } + ++p; + if (!g_ascii_isxdigit (*p)) + { + return FALSE; + } + } + else + { + if (*p <= 32 || *p >= 128) + { + return FALSE; + } + } + } - return TRUE; + return TRUE; } static GtkWidget * -handle_builder_error (const gchar *message, ...) +handle_builder_error (const gchar *message, + ...) { - GtkWidget *label; - gchar *msg; - gchar *msg_plain; - va_list args; + GtkWidget *label; + gchar *msg; + gchar *msg_plain; + va_list args; - va_start (args, message); - msg_plain = g_strdup_vprintf (message, args); - va_end (args); + va_start (args, message); + msg_plain = g_strdup_vprintf (message, args); + va_end (args); - label = gtk_label_new (NULL); - gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); + label = gtk_label_new (NULL); + gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); - msg = g_strconcat ("", - msg_plain, "\n\n", - _("Please check your installation."), - NULL); + msg = g_strconcat ("", + msg_plain, "\n\n", + _("Please check your installation."), + NULL); - gtk_label_set_markup (GTK_LABEL (label), msg); + gtk_label_set_markup (GTK_LABEL (label), msg); - g_free (msg_plain); - g_free (msg); + g_free (msg_plain); + g_free (msg); - gtk_widget_set_margin_left (label, 5); - gtk_widget_set_margin_right (label, 5); - gtk_widget_set_margin_top (label, 5); - gtk_widget_set_margin_bottom (label, 5); + gtk_widget_set_margin_left (label, 5); + gtk_widget_set_margin_right (label, 5); + gtk_widget_set_margin_top (label, 5); + gtk_widget_set_margin_bottom (label, 5); - return label; + return label; } /* FIXME this is an issue for introspection */ @@ -1141,129 +1190,126 @@ handle_builder_error (const gchar *message, ...) */ gboolean xed_utils_get_ui_objects (const gchar *filename, - gchar **root_objects, - GtkWidget **error_widget, - const gchar *object_name, - ...) + gchar **root_objects, + GtkWidget **error_widget, + const gchar *object_name, + ...) { - GtkBuilder *builder; - va_list args; - const gchar *name; - GError *error = NULL; - gchar *filename_markup; - gboolean ret = TRUE; + GtkBuilder *builder; + va_list args; + const gchar *name; + GError *error = NULL; + gchar *filename_markup; + gboolean ret = TRUE; - g_return_val_if_fail (filename != NULL, FALSE); - g_return_val_if_fail (error_widget != NULL, FALSE); - g_return_val_if_fail (object_name != NULL, FALSE); + g_return_val_if_fail (filename != NULL, FALSE); + g_return_val_if_fail (error_widget != NULL, FALSE); + g_return_val_if_fail (object_name != NULL, FALSE); - filename_markup = g_markup_printf_escaped ("%s", filename); - *error_widget = NULL; + filename_markup = g_markup_printf_escaped ("%s", filename); + *error_widget = NULL; - builder = gtk_builder_new (); + builder = gtk_builder_new (); - if (root_objects != NULL) - { - gtk_builder_add_objects_from_file (builder, - filename, - root_objects, - &error); - } - else - { - gtk_builder_add_from_file (builder, - filename, - &error); - } + if (root_objects != NULL) + { + gtk_builder_add_objects_from_file (builder, filename, root_objects, &error); + } + else + { + gtk_builder_add_from_file (builder, filename, &error); + } - if (error != NULL) - { - *error_widget = handle_builder_error (_("Unable to open UI file %s. Error: %s"), - filename_markup, - error->message); - g_error_free (error); - g_free (filename_markup); - g_object_unref (builder); + if (error != NULL) + { + *error_widget = handle_builder_error (_("Unable to open UI file %s. Error: %s"), + filename_markup, + error->message); + g_error_free (error); + g_free (filename_markup); + g_object_unref (builder); - return FALSE; - } + return FALSE; + } - va_start (args, object_name); - for (name = object_name; name; name = va_arg (args, const gchar *) ) - { - GObject **gobj; + va_start (args, object_name); + for (name = object_name; name; name = va_arg (args, const gchar *) ) + { + GObject **gobj; - gobj = va_arg (args, GObject **); - *gobj = gtk_builder_get_object (builder, name); + gobj = va_arg (args, GObject **); + *gobj = gtk_builder_get_object (builder, name); - if (!*gobj) - { - *error_widget = handle_builder_error (_("Unable to find the object '%s' inside file %s."), - name, - filename_markup), - ret = FALSE; - break; - } + if (!*gobj) + { + *error_widget = handle_builder_error (_("Unable to find the object '%s' inside file %s."), + name, + filename_markup), + ret = FALSE; + break; + } - /* we return a new ref for the root objects, - * the others are already reffed by their parent root object */ - if (root_objects != NULL) - { - gint i; + /* we return a new ref for the root objects, + * the others are already reffed by their parent root object */ + if (root_objects != NULL) + { + gint i; - for (i = 0; root_objects[i] != NULL; ++i) - { - if ((strcmp (name, root_objects[i]) == 0)) - { - g_object_ref (*gobj); - } - } - } - } - va_end (args); + for (i = 0; root_objects[i] != NULL; ++i) + { + if ((strcmp (name, root_objects[i]) == 0)) + { + g_object_ref (*gobj); + } + } + } + } + va_end (args); - g_free (filename_markup); - g_object_unref (builder); + g_free (filename_markup); + g_object_unref (builder); - return ret; + return ret; } gchar * xed_utils_make_canonical_uri_from_shell_arg (const gchar *str) { - GFile *gfile; - gchar *uri; + GFile *gfile; + gchar *uri; - g_return_val_if_fail (str != NULL, NULL); - g_return_val_if_fail (*str != '\0', NULL); + g_return_val_if_fail (str != NULL, NULL); + g_return_val_if_fail (*str != '\0', NULL); - /* Note for the future: - * FIXME: is still still relevant? - * - * paolo: and flame whoever tells - * you that file:///mate/test_files/hëllò - * doesn't work --- that's not a valid URI - * - * federico: well, another solution that - * does not requires patch to _from_shell_args - * is to check that the string returned by it - * contains only ASCII chars - * paolo: hmmmm, isn't there - * mate_vfs_is_uri_valid() or something? - * : I will use xed_utils_is_valid_uri () - * - */ + /* Note for the future: + * FIXME: is still still relevant? + * + * paolo: and flame whoever tells + * you that file:///mate/test_files/hëllò + * doesn't work --- that's not a valid URI + * + * federico: well, another solution that + * does not requires patch to _from_shell_args + * is to check that the string returned by it + * contains only ASCII chars + * paolo: hmmmm, isn't there + * mate_vfs_is_uri_valid() or something? + * : I will use xed_utils_is_valid_uri () + * + */ - gfile = g_file_new_for_commandline_arg (str); - uri = g_file_get_uri (gfile); - g_object_unref (gfile); + gfile = g_file_new_for_commandline_arg (str); + uri = g_file_get_uri (gfile); + g_object_unref (gfile); - if (xed_utils_is_valid_uri (uri)) - return uri; + if (xed_utils_is_valid_uri (uri)) + { + return uri; + } - g_free (uri); - return NULL; + g_free (uri); + return NULL; } /** @@ -1276,16 +1322,18 @@ xed_utils_make_canonical_uri_from_shell_arg (const gchar *str) gboolean xed_utils_file_has_parent (GFile *gfile) { - GFile *parent; - gboolean ret; + GFile *parent; + gboolean ret; - parent = g_file_get_parent (gfile); - ret = parent != NULL; + parent = g_file_get_parent (gfile); + ret = parent != NULL; - if (parent) - g_object_unref (parent); + if (parent) + { + g_object_unref (parent); + } - return ret; + return ret; } /** @@ -1297,77 +1345,81 @@ xed_utils_file_has_parent (GFile *gfile) gchar * xed_utils_basename_for_display (gchar const *uri) { - gchar *name; - GFile *gfile; - gchar *hn; + gchar *name; + GFile *gfile; + gchar *hn; - g_return_val_if_fail (uri != NULL, NULL); + g_return_val_if_fail (uri != NULL, NULL); - gfile = g_file_new_for_uri (uri); + gfile = g_file_new_for_uri (uri); - /* First, try to query the display name, but only on local files */ - if (g_file_has_uri_scheme (gfile, "file")) - { - GFileInfo *info; - info = g_file_query_info (gfile, - G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME, - G_FILE_QUERY_INFO_NONE, - NULL, - NULL); + /* First, try to query the display name, but only on local files */ + if (g_file_has_uri_scheme (gfile, "file")) + { + GFileInfo *info; + info = g_file_query_info (gfile, + G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME, + G_FILE_QUERY_INFO_NONE, + NULL, + NULL); - if (info) - { - /* Simply get the display name to use as the basename */ - name = g_strdup (g_file_info_get_display_name (info)); - g_object_unref (info); - } - else - { - /* This is a local file, and therefore we will use - * g_filename_display_basename on the local path */ - gchar *local_path; + if (info) + { + /* Simply get the display name to use as the basename */ + name = g_strdup (g_file_info_get_display_name (info)); + g_object_unref (info); + } + else + { + /* This is a local file, and therefore we will use + * g_filename_display_basename on the local path */ + gchar *local_path; - local_path = g_file_get_path (gfile); - name = g_filename_display_basename (local_path); - g_free (local_path); - } - } - else if (xed_utils_file_has_parent (gfile) || !xed_utils_decode_uri (uri, NULL, NULL, &hn, NULL, NULL)) - { - /* For remote files with a parent (so not just http://foo.com) - or remote file for which the decoding of the host name fails, - use the _parse_name and take basename of that */ - gchar *parse_name; - gchar *base; + local_path = g_file_get_path (gfile); + name = g_filename_display_basename (local_path); + g_free (local_path); + } + } + else if (xed_utils_file_has_parent (gfile) || !xed_utils_decode_uri (uri, NULL, NULL, &hn, NULL, NULL)) + { + /* For remote files with a parent (so not just http://foo.com) + or remote file for which the decoding of the host name fails, + use the _parse_name and take basename of that */ + gchar *parse_name; + gchar *base; - parse_name = g_file_get_parse_name (gfile); - base = g_filename_display_basename (parse_name); - name = g_uri_unescape_string (base, NULL); + parse_name = g_file_get_parse_name (gfile); + base = g_filename_display_basename (parse_name); + name = g_uri_unescape_string (base, NULL); - g_free (base); - g_free (parse_name); - } - else - { - /* display '/ on ' using the decoded host */ - gchar *hn_utf8; + g_free (base); + g_free (parse_name); + } + else + { + /* display '/ on ' using the decoded host */ + gchar *hn_utf8; - if (hn != NULL) - hn_utf8 = xed_utils_make_valid_utf8 (hn); - else - /* we should never get here */ - hn_utf8 = g_strdup ("?"); + if (hn != NULL) + { + hn_utf8 = xed_utils_make_valid_utf8 (hn); + } + else + { + /* we should never get here */ + hn_utf8 = g_strdup ("?"); + } - /* Translators: '/ on ' */ - name = g_strdup_printf (_("/ on %s"), hn_utf8); + /* Translators: '/ on ' */ + name = g_strdup_printf (_("/ on %s"), hn_utf8); - g_free (hn_utf8); - g_free (hn); - } + g_free (hn_utf8); + g_free (hn); + } - g_object_unref (gfile); + g_object_unref (gfile); - return name; + return name; } /** @@ -1384,14 +1436,14 @@ xed_utils_basename_for_display (gchar const *uri) gchar * xed_utils_uri_for_display (const gchar *uri) { - GFile *gfile; - gchar *parse_name; + GFile *gfile; + gchar *parse_name; - gfile = g_file_new_for_uri (uri); - parse_name = g_file_get_parse_name (gfile); - g_object_unref (gfile); + gfile = g_file_new_for_uri (uri); + parse_name = g_file_get_parse_name (gfile); + g_object_unref (gfile); - return parse_name; + return parse_name; } /** @@ -1401,47 +1453,51 @@ xed_utils_uri_for_display (const gchar *uri) * Create a list of valid uri's from a uri-list drop. * * Return value: (transfer full): a string array which will hold the uris or %NULL if there - * were no valid uris. g_strfreev should be used when the - * string array is no longer used + * were no valid uris. g_strfreev should be used when the + * string array is no longer used */ gchar ** xed_utils_drop_get_uris (GtkSelectionData *selection_data) { - gchar **uris; - gint i; - gint p = 0; - gchar **uri_list; + gchar **uris; + gint i; + gint p = 0; + gchar **uri_list; - uris = g_uri_list_extract_uris ((gchar *) gtk_selection_data_get_data (selection_data)); - uri_list = g_new0(gchar *, g_strv_length (uris) + 1); + uris = g_uri_list_extract_uris ((gchar *) gtk_selection_data_get_data (selection_data)); + uri_list = g_new0(gchar *, g_strv_length (uris) + 1); - for (i = 0; uris[i] != NULL; i++) - { - gchar *uri; + for (i = 0; uris[i] != NULL; i++) + { + gchar *uri; - uri = xed_utils_make_canonical_uri_from_shell_arg (uris[i]); + uri = xed_utils_make_canonical_uri_from_shell_arg (uris[i]); - /* Silently ignore malformed URI/filename */ - if (uri != NULL) - uri_list[p++] = uri; - } + /* Silently ignore malformed URI/filename */ + if (uri != NULL) + { + uri_list[p++] = uri; + } + } - g_strfreev (uris); + g_strfreev (uris); - if (*uri_list == NULL) - { - g_free(uri_list); - return NULL; - } + if (*uri_list == NULL) + { + g_free(uri_list); + return NULL; + } - return uri_list; + return uri_list; } static void null_ptr (gchar **ptr) { - if (ptr) - *ptr = NULL; + if (ptr) + { + *ptr = NULL; + } } /** @@ -1463,128 +1519,149 @@ null_ptr (gchar **ptr) */ gboolean xed_utils_decode_uri (const gchar *uri, - gchar **scheme, - gchar **user, - gchar **host, - gchar **port, - gchar **path + gchar **scheme, + gchar **user, + gchar **host, + gchar **port, + gchar **path ) { - /* Largely copied from glib/gio/gdummyfile.c:_g_decode_uri. This - * functionality should be in glib/gio, but for now we implement it - * ourselves (see bug #546182) */ + /* Largely copied from glib/gio/gdummyfile.c:_g_decode_uri. This + * functionality should be in glib/gio, but for now we implement it + * ourselves (see bug #546182) */ - const char *p, *in, *hier_part_start, *hier_part_end; - char *out; - char c; + const char *p, *in, *hier_part_start, *hier_part_end; + char *out; + char c; - /* From RFC 3986 Decodes: - * URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] - */ + /* From RFC 3986 Decodes: + * URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] + */ - p = uri; + p = uri; - null_ptr (scheme); - null_ptr (user); - null_ptr (port); - null_ptr (host); - null_ptr (path); + null_ptr (scheme); + null_ptr (user); + null_ptr (port); + null_ptr (host); + null_ptr (path); - /* Decode scheme: - * scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) - */ + /* Decode scheme: + * scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) + */ - if (!g_ascii_isalpha (*p)) - return FALSE; + if (!g_ascii_isalpha (*p)) + { + return FALSE; + } - while (1) - { - c = *p++; + while (1) + { + c = *p++; - if (c == ':') - break; + if (c == ':') + { + break; + } - if (!(g_ascii_isalnum(c) || - c == '+' || - c == '-' || - c == '.')) - return FALSE; - } + if (!(g_ascii_isalnum(c) || c == '+' || c == '-' || c == '.')) + { + return FALSE; + } + } - if (scheme) - { - *scheme = g_malloc (p - uri); - out = *scheme; + if (scheme) + { + *scheme = g_malloc (p - uri); + out = *scheme; - for (in = uri; in < p - 1; in++) - *out++ = g_ascii_tolower (*in); + for (in = uri; in < p - 1; in++) + { + *out++ = g_ascii_tolower (*in); + } - *out = '\0'; - } + *out = '\0'; + } - hier_part_start = p; - hier_part_end = p + strlen (p); + hier_part_start = p; + hier_part_end = p + strlen (p); - if (hier_part_start[0] == '/' && hier_part_start[1] == '/') - { - const char *authority_start, *authority_end; - const char *userinfo_start, *userinfo_end; - const char *host_start, *host_end; - const char *port_start; + if (hier_part_start[0] == '/' && hier_part_start[1] == '/') + { + const char *authority_start, *authority_end; + const char *userinfo_start, *userinfo_end; + const char *host_start, *host_end; + const char *port_start; - authority_start = hier_part_start + 2; - /* authority is always followed by / or nothing */ - authority_end = memchr (authority_start, '/', hier_part_end - authority_start); + authority_start = hier_part_start + 2; + /* authority is always followed by / or nothing */ + authority_end = memchr (authority_start, '/', hier_part_end - authority_start); - if (authority_end == NULL) - authority_end = hier_part_end; + if (authority_end == NULL) + { + authority_end = hier_part_end; + } - /* 3.2: - * authority = [ userinfo "@" ] host [ ":" port ] - */ + /* 3.2: + * authority = [ userinfo "@" ] host [ ":" port ] + */ - userinfo_end = memchr (authority_start, '@', authority_end - authority_start); + userinfo_end = memchr (authority_start, '@', authority_end - authority_start); - if (userinfo_end) - { - userinfo_start = authority_start; + if (userinfo_end) + { + userinfo_start = authority_start; - if (user) - *user = g_uri_unescape_segment (userinfo_start, userinfo_end, NULL); + if (user) + { + *user = g_uri_unescape_segment (userinfo_start, userinfo_end, NULL); + } - if (user && *user == NULL) - { - if (scheme) - g_free (*scheme); + if (user && *user == NULL) + { + if (scheme) + { + g_free (*scheme); + } - return FALSE; - } + return FALSE; + } - host_start = userinfo_end + 1; - } - else - host_start = authority_start; + host_start = userinfo_end + 1; + } + else + { + host_start = authority_start; + } - port_start = memchr (host_start, ':', authority_end - host_start); + port_start = memchr (host_start, ':', authority_end - host_start); - if (port_start) - { - host_end = port_start++; + if (port_start) + { + host_end = port_start++; - if (port) - *port = g_strndup (port_start, authority_end - port_start); - } - else - host_end = authority_end; + if (port) + { + *port = g_strndup (port_start, authority_end - port_start); + } + } + else + { + host_end = authority_end; + } - if (host) - *host = g_strndup (host_start, host_end - host_start); + if (host) + { + *host = g_strndup (host_start, host_end - host_start); + } - hier_part_start = authority_end; - } + hier_part_start = authority_end; + } - if (path) - *path = g_uri_unescape_segment (hier_part_start, hier_part_end, "/"); + if (path) + { + *path = g_uri_unescape_segment (hier_part_start, hier_part_end, "/"); + } - return TRUE; + return TRUE; }