/** * Parse program parameters and remove all parameters * that have been processed. Arguments are pointers to * original passed programm arguments and these will * be modified leaving only unknown parameters for * further processing * * \param argc pointer to number of parameters * \param argv pointer to array of parameter strings */ static void parse_parameter(int *argc, char ***argv) { gint i, j, k; cm_return_if_fail(argc != NULL); cm_return_if_fail(argv != NULL); for (i = 1; i < *argc;) { if (strcmp("--debug", (*argv)[i]) == 0) { debug_set_mode(TRUE); (*argv)[i] = NULL; } i += 1; } /* Remove NULL args from argv[] for further processing */ for (i = 1; i < *argc; i++) { for (k = i; k < *argc; k++) if ((*argv)[k] != NULL) break; if (k > i) { k -= i; for (j = i + k; j < *argc; j++) (*argv)[j - k] = (*argv)[j]; *argc -= k; } } }
static void prefs_themes_foreach_file(const gchar *dirname, const FileFunc func, gpointer data) { struct dirent *d; DIR *dp; cm_return_if_fail(dirname != NULL); cm_return_if_fail(func != NULL); if ((dp = opendir(dirname)) == NULL) { debug_print("directory %s not found\n", dirname); return; } while ((d = readdir(dp)) != NULL) { gchar *entry; gchar *fullentry; entry = d->d_name; fullentry = g_strconcat(dirname, G_DIR_SEPARATOR_S, entry, NULL); (*func)(fullentry, data); g_free(fullentry); } closedir(dp); }
void uri_opener_open(MessageView *msgview, GSList *uris) { cm_return_if_fail(msgview); cm_return_if_fail(msgview->mimeview); cm_return_if_fail(msgview->mimeview->textview); cm_return_if_fail(msgview); if (!opener.window) uri_opener_create(); manage_window_set_transient(GTK_WINDOW(opener.window)); gtk_widget_grab_focus(opener.close_btn); if (uris == NULL) { alertpanel_notice(_("There are no URLs in this email.")); return; } opener.msgview = msgview; opener.uris = g_slist_copy(uris); uri_opener_load_uris(); gtk_widget_show(opener.window); gtk_widget_grab_focus(opener.urilist); gtk_window_set_modal(GTK_WINDOW(opener.window), TRUE); }
/* * Allocate ID for user attribute. */ void addrcache_id_attribute( AddressCache *cache, UserAttribute *attrib ) { cm_return_if_fail( cache != NULL ); cm_return_if_fail( attrib != NULL ); if( attrib->uid ) return; addrcache_next_id( cache ); attrib->uid = g_strdup_printf( "%d", cache->nextID ); }
static void prefs_themes_foreach_file(const gchar *dirname, const FileFunc func, gpointer data) { const gchar *entry; gchar *fullentry; GDir *dp; GError *error = NULL; cm_return_if_fail(dirname != NULL); cm_return_if_fail(func != NULL); if ((dp = g_dir_open(dirname, 0, &error)) == NULL) { debug_print("couldn't open dir '%s': %s (%d)\n", dirname, error->message, error->code); g_error_free(error); return; } while ((entry = g_dir_read_name(dp)) != NULL) { fullentry = g_strconcat(dirname, G_DIR_SEPARATOR_S, entry, NULL); (*func)(fullentry, data); g_free(fullentry); } g_dir_close(dp); }
/* * Allocate ID for folder. */ void addrcache_id_folder( AddressCache *cache, ItemFolder *folder ) { cm_return_if_fail( cache != NULL ); cm_return_if_fail( folder != NULL ); if( ADDRITEM_ID(folder) ) return; addrcache_next_id( cache ); ADDRITEM_ID(folder) = g_strdup_printf( "%d", cache->nextID ); }
/* * Allocate ID for email address. */ void addrcache_id_email( AddressCache *cache, ItemEMail *email ) { cm_return_if_fail( cache != NULL ); cm_return_if_fail( email != NULL ); if( ADDRITEM_ID(email) ) return; addrcache_next_id( cache ); ADDRITEM_ID(email) = g_strdup_printf( "%d", cache->nextID ); }
/* * Allocate ID for group. */ void addrcache_id_group( AddressCache *cache, ItemGroup *group ) { cm_return_if_fail( cache != NULL ); cm_return_if_fail( group != NULL ); if( ADDRITEM_ID(group) ) return; addrcache_next_id( cache ); ADDRITEM_ID(group) = g_strdup_printf( "%d", cache->nextID ); }
/* * Allocate ID for person. */ void addrcache_id_person( AddressCache *cache, ItemPerson *person ) { cm_return_if_fail( cache != NULL ); cm_return_if_fail( person != NULL ); if( ADDRITEM_ID(person) ) return; addrcache_next_id( cache ); ADDRITEM_ID(person) = g_strdup_printf( "%d", cache->nextID ); }
static void new_folder_cb(GtkAction *action, gpointer data) { FolderView *folderview = (FolderView *)data; FolderItem *item; FolderItem *new_item; gchar *new_folder; gchar *name; gchar *p; gchar separator = '/'; if (!folderview->selected) return; item = folderview_get_selected_item(folderview); cm_return_if_fail(item != NULL); cm_return_if_fail(item->folder != NULL); cm_return_if_fail(item->folder->account != NULL); new_folder = input_dialog_with_checkbtn (_("New folder"), _("Input the name of new folder:\n" "(if you want to create a folder to store subfolders\n" "only and no mail, append '/' to the folder name)"), _("NewFolder"), _("Inherit properties from parent folder"), &(prefs_common.inherit_folder_props)); if (!new_folder) return; AUTORELEASE_STR(new_folder, {g_free(new_folder); return;});
void gtk_vscrollbutton_set_adjustment(GtkVScrollbutton *scrollbutton, GtkAdjustment *adjustment) { cm_return_if_fail(scrollbutton != NULL); cm_return_if_fail(GTK_IS_VSCROLLBUTTON(scrollbutton)); if (!adjustment) adjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); else cm_return_if_fail(GTK_IS_ADJUSTMENT(adjustment)); if (scrollbutton->adjustment != adjustment) { if (scrollbutton->adjustment) { g_signal_handlers_disconnect_matched(scrollbutton->adjustment, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, (gpointer) scrollbutton); g_object_unref(G_OBJECT(scrollbutton->adjustment)); } scrollbutton->adjustment = adjustment; g_object_ref(G_OBJECT(adjustment)); g_object_ref_sink (G_OBJECT(adjustment)); } }
static void prefs_themes_get_theme_info(ThemesData *tdata) { FILE *finfo; gchar *sinfo; gchar *path; gchar line[INFOFILE_LINE_LEN]; gint len; ThemeInfo *info; ThemesPage *theme = tdata->page; cm_return_if_fail(theme != NULL); path = tdata->displayed; cm_return_if_fail(path != NULL); debug_print("Getting theme info for %s\n", path); info = g_new0(ThemeInfo, 1); if (IS_INTERNAL_THEME(path)) { info->name = g_strdup(_("Default internal theme")); info->author = g_strdup(_("The Claws Mail Team")); info->url = g_strdup(HOMEPAGE_URI); info->status = g_strdup_printf(_("Internal theme has %d icons"), N_STOCK_PIXMAPS); } else { sinfo = g_strconcat(path, G_DIR_SEPARATOR_S, THEMEINFO_FILE, NULL); finfo = g_fopen(sinfo, "r"); if (finfo == NULL) { info->name = g_strdup(_("No info file available for this theme")); info->author = g_strdup(_("Unknown")); info->url = g_strdup(_("Unknown")); } else { FGETS_INFOFILE_LINE() info->name = g_strdup(line); FGETS_INFOFILE_LINE() info->author = g_strdup(line); FGETS_INFOFILE_LINE() info->url = g_strdup(line); fclose(finfo); } g_free(sinfo); info->status = prefs_themes_get_theme_stats(path); if (info->status == NULL) { info->status = g_strdup(_("Error: couldn't get theme status")); } } prefs_themes_display_theme_info(tdata, info); g_free(info->name); g_free(info->author); g_free(info->url); g_free(info->status); g_free(info); }
static void date_format_cancel_btn_clicked(GtkButton *button, GtkWidget **widget) { cm_return_if_fail(widget != NULL); cm_return_if_fail(*widget != NULL); gtk_widget_destroy(*widget); *widget = NULL; }
static void gtk_vscrollbutton_remove_timer(GtkVScrollbutton *scrollbutton) { cm_return_if_fail(scrollbutton != NULL); cm_return_if_fail(GTK_IS_VSCROLLBUTTON(scrollbutton)); if (scrollbutton->timer) { g_source_remove(scrollbutton->timer); scrollbutton->timer = 0; } scrollbutton->need_timer = FALSE; }
static void gtk_vscrollbutton_add_timer(GtkVScrollbutton *scrollbutton) { cm_return_if_fail(scrollbutton != NULL); cm_return_if_fail(GTK_IS_VSCROLLBUTTON(scrollbutton)); if (!scrollbutton->timer) { scrollbutton->need_timer = TRUE; scrollbutton->timer = g_timeout_add(SCROLL_INITIAL_DELAY, (GSourceFunc) gtk_vscrollbutton_timer_1st_time, scrollbutton); } }
static void unsubscribe_newsgroup_cb(GtkAction *action, gpointer data) { FolderView *folderview = (FolderView *)data; FolderItem *item; gchar *name; gchar *message; gchar *old_id; AlertValue avalue; MainWindow *mainwin = mainwindow_get_mainwindow(); if (!folderview->selected) return; item = folderview_get_selected_item(folderview); cm_return_if_fail(item != NULL); if (mainwin->lock_count || news_folder_locked(item->folder)) return; cm_return_if_fail(item->folder != NULL); cm_return_if_fail(FOLDER_TYPE(item->folder) == F_NEWS); cm_return_if_fail(item->folder->account != NULL); old_id = folder_item_get_identifier(item); name = trim_string(item->path, 32); message = g_strdup_printf(_("Really unsubscribe newsgroup '%s'?"), name); avalue = alertpanel_full(_("Unsubscribe newsgroup"), message, GTK_STOCK_CANCEL, _("_Unsubscribe"), NULL, ALERTFOCUS_FIRST, FALSE, NULL, ALERT_WARNING); g_free(message); g_free(name); if (avalue != G_ALERTALTERNATE) return; if (item == folderview_get_opened_item(folderview)) { summary_clear_all(folderview->summaryview); folderview_close_opened(folderview, TRUE); } if(item->folder->klass->remove_folder(item->folder, item) < 0) { folder_item_scan(item); alertpanel_error(_("Can't remove the folder '%s'."), name); g_free(old_id); return; } folder_write_list(); prefs_filtering_delete_path(old_id); g_free(old_id); }
/* * Move person to destination folder. * Enter: cache Cache. * person Person to move. * target Target folder. */ void addrcache_folder_move_person( AddressCache *cache, ItemPerson *person, ItemFolder *target ) { ItemFolder *parent; cm_return_if_fail( cache != NULL ); cm_return_if_fail( person != NULL ); parent = ( ItemFolder * ) ADDRITEM_PARENT(person); if( ! parent ) parent = cache->rootFolder; parent->listPerson = g_list_remove( parent->listPerson, person ); target->listPerson = g_list_append( target->listPerson, person ); ADDRITEM_PARENT(person) = ADDRITEM_OBJECT(target); cache->dirtyFlag = TRUE; }
/* * Move folder to destination folder. * Enter: cache Cache. * folder Folder to move. * target Target folder. */ void addrcache_folder_move_folder( AddressCache *cache, ItemFolder *folder, ItemFolder *target ) { ItemFolder *parent; cm_return_if_fail( cache != NULL ); cm_return_if_fail( folder != NULL ); parent = ( ItemFolder * ) ADDRITEM_PARENT(folder); if( ! parent ) parent = cache->rootFolder; parent->listFolder = g_list_remove( parent->listFolder, folder ); target->listFolder = g_list_append( target->listFolder, folder ); ADDRITEM_PARENT(folder) = ADDRITEM_OBJECT(target); cache->dirtyFlag = TRUE; }
static void undo_add(const gchar *text, gint start_pos, gint end_pos, UndoAction action, UndoMain *undostruct) { UndoInfo *undoinfo; GtkAdjustment *vadj; cm_return_if_fail(text != NULL); cm_return_if_fail(end_pos >= start_pos); undo_free_list(&undostruct->redo); /* Set the redo sensitivity */ undostruct->change_state_func(undostruct, UNDO_STATE_UNCHANGED, UNDO_STATE_FALSE, undostruct->change_state_data); if (undostruct->paste != 0) { if (action == UNDO_ACTION_INSERT) action = UNDO_ACTION_REPLACE_INSERT; else action = UNDO_ACTION_REPLACE_DELETE; undostruct->paste = undostruct->paste + 1; if (undostruct->paste == 3) undostruct->paste = 0; } if (undo_merge(undostruct->undo, start_pos, end_pos, action, text)) return; undo_check_size(undostruct); vadj = GTK_ADJUSTMENT(gtk_text_view_get_vadjustment( GTK_TEXT_VIEW(undostruct->textview))); undoinfo = undo_object_new(g_strdup(text), start_pos, end_pos, action, gtk_adjustment_get_value(vadj)); if (end_pos - start_pos != 1 || text[0] == '\n') undoinfo->mergeable = FALSE; else undoinfo->mergeable = TRUE; undostruct->undo = g_list_prepend(undostruct->undo, undoinfo); undostruct->change_state_func(undostruct, UNDO_STATE_TRUE, UNDO_STATE_UNCHANGED, undostruct->change_state_data); }
static void pop3_session_destroy(Session *session) { Pop3Session *pop3_session = POP3_SESSION(session); gint n; cm_return_if_fail(session != NULL); for (n = 1; n <= pop3_session->count; n++) g_free(pop3_session->msg[n].uidl); g_free(pop3_session->msg); if (pop3_session->uidl_table) { hash_free_strings(pop3_session->uidl_table); g_hash_table_destroy(pop3_session->uidl_table); } if (pop3_session->partial_recv_table) { hash_free_strings(pop3_session->partial_recv_table); g_hash_table_destroy(pop3_session->partial_recv_table); } g_free(pop3_session->greeting); g_free(pop3_session->user); g_free(pop3_session->pass); g_free(pop3_session->error_msg); pop3_session->ac_prefs->receive_in_progress = FALSE; }
static void prefs_themes_get_themes_and_names(ThemesData *tdata) { GList *tpaths; cm_return_if_fail(tdata != NULL); if (tdata->themes != NULL) stock_pixmap_themes_list_free(tdata->themes); if (tdata->names != NULL) prefs_themes_free_names(tdata); tdata->themes = stock_pixmap_themes_list_new(); tpaths = tdata->themes; while (tpaths != NULL) { ThemeName *name = g_new0(ThemeName, 1); gchar *sname = g_path_get_basename((const gchar *)(tpaths->data)); if (IS_INTERNAL_THEME(sname)) name->name = g_strdup(_("Default internal theme")); else name->name = g_strdup(sname); name->item = tpaths; tdata->names = g_list_append(tdata->names, name); if (!strcmp2(tpaths->data, prefs_common.pixmap_theme_path)) { tdata->displayed = (gchar *)tpaths->data; } tpaths = g_list_next(tpaths); g_free(sname); } }
/** * Advance selection to previous/next item in list. * \param list_view List to process. * \param forward Set to <i>TRUE</i> to select next or <i>FALSE</i> for * previous entry. */ static void completion_window_advance_selection(GtkTreeView *list_view, gboolean forward) { GtkTreeSelection *selection; GtkTreeIter iter; GtkTreeModel *model; cm_return_if_fail(list_view != NULL); selection = gtk_tree_view_get_selection(list_view); if (!gtk_tree_selection_get_selected(selection, &model, &iter)) return; if (forward) { forward = gtk_tree_model_iter_next(model, &iter); if (forward) gtk_tree_selection_select_iter(selection, &iter); } else { GtkTreePath *prev; prev = gtk_tree_model_get_path(model, &iter); if (!prev) return; if (gtk_tree_path_prev(prev)) gtk_tree_selection_select_path(selection, prev); gtk_tree_path_free(prev); } }
static void inc_session_destroy(IncSession *session) { cm_return_if_fail(session != NULL); session_destroy(session->session); g_free(session); }
/** * Print address group item for debug. * \param group Group to print. * \param stream Output stream. */ void addritem_print_item_group( ItemGroup *group, FILE *stream ) { GList *node; ItemPerson *person; ItemEMail *item; cm_return_if_fail( group != NULL ); fprintf( stream, "Group:\n" ); fprintf( stream, "\tt/u: %d : '%s'\n", ADDRITEM_TYPE(group), ADDRITEM_ID(group) ); fprintf( stream, "\tsub: %d\n", ADDRITEM_SUBTYPE(group) ); fprintf( stream, "\tgrp: '%s'\n", ADDRITEM_NAME(group) ); fprintf( stream, "\trem: '%s'\n", group->remarks ); fprintf( stream, "\t---\n" ); node = group->listEMail; while( node ) { item = node->data; person = ( ItemPerson * ) ADDRITEM_PARENT(item); if( person ) { fprintf( stream, "\t\tpid : '%s'\n", ADDRITEM_ID(person) ); fprintf( stream, "\t\tcomn: '%s'\n", ADDRITEM_NAME(person) ); } else { fprintf( stream, "\t\tpid : ???\n" ); fprintf( stream, "\t\tcomn: ???\n" ); } addritem_print_item_email( item, stream ); node = g_list_next( node ); } fprintf( stream, "\t***\n" ); }
/** * Print user attribute object for debug. * \param item Attribute to print. * \param stream Output stream. */ static void addritem_print_attribute( UserAttribute *item, FILE *stream ) { cm_return_if_fail( item != NULL ); fprintf( stream, "\t\tuid : '%s'\n", item->uid ); fprintf( stream, "\t\tname : '%s'\n", item->name ); fprintf( stream, "\t\tvalue: '%s'\n", item->value ); fprintf( stream, "\t\t---\n" ); }
static void xml_push_tag(XMLFile *file, XMLTag *tag) { cm_return_if_fail(tag != NULL); file->tag_stack = g_list_prepend(file->tag_stack, tag); file->level++; }
static void sc_html_parse_special(SC_HTMLParser *parser) { gchar symbol_name[9]; gint n; const gchar *val; parser->state = SC_HTML_UNKNOWN; cm_return_if_fail(*parser->bufp == '&'); /* &foo; */ for (n = 0; parser->bufp[n] != '\0' && parser->bufp[n] != ';'; n++) ; if (n > 7 || parser->bufp[n] != ';') { /* output literal `&' */ sc_html_append_char(parser, *parser->bufp++); parser->state = SC_HTML_NORMAL; return; } strncpy2(symbol_name, parser->bufp, n + 2); parser->bufp += n + 1; if ((val = g_hash_table_lookup(parser->symbol_table, symbol_name)) != NULL) { sc_html_append_str(parser, val, -1); parser->state = SC_HTML_NORMAL; return; } sc_html_append_str(parser, symbol_name, -1); }
static void close_dialog (struct select_keys_s *sk) { cm_return_if_fail (sk); gtk_widget_destroy (sk->window); sk->window = NULL; }
void filteringaction_free(FilteringAction * action) { cm_return_if_fail(action); g_free(action->header); g_free(action->destination); g_free(action); }
/** * Free address folder. Note: this does not free up the lists of children * (folders, groups and person). This should be done prior to calling this * function. * \param folder Folder to free. */ void addritem_free_item_folder( ItemFolder *folder ) { cm_return_if_fail( folder != NULL ); /* Free internal stuff */ g_free( ADDRITEM_ID(folder) ); g_free( ADDRITEM_NAME(folder) ); g_free( folder->remarks ); mgu_clear_list( folder->listItems ); g_list_free( folder->listItems ); ADDRITEM_TYPE(folder) = ITEMTYPE_NONE; ADDRITEM_ID(folder) = NULL; ADDRITEM_NAME(folder) = NULL; ADDRITEM_PARENT(folder) = NULL; ADDRITEM_SUBTYPE(folder) = 0; folder->isRoot = FALSE; folder->remarks = NULL; folder->listItems = NULL; folder->listFolder = NULL; folder->listGroup = NULL; folder->listPerson = NULL; folder->folderType = ADDRFOLDER_NONE; folder->folderData = NULL; folder->isHidden = FALSE; g_free( folder ); }