📄 callbacks.c
字号:
/* open the about dialog box */ About = create_about(); gtk_widget_show(About);}void on_send_pressed(GtkButton * button, gpointer user_data){ /* lauch smsend for the current provider */ PProvider_t Pv = (PProvider_t) user_data; if (DelaySend) { /* allocate parameters struct */ PcmdParam_t sms_param = g_new(cmdParam_t, 1); sms_param->Pv = Pv; sms_param->Help = FALSE; sms_param->Update = FALSE; sms_param->Callback = 0; sms_param->Callback2 = 0; sms_param->Done = 999; sms_param->argc = 0; CreateArgv(sms_param); DelayList = g_slist_append(DelayList,(gpointer)sms_param); gnome_appbar_set_status(GNOME_APPBAR(Appbar), _("SmsSend delayed ...")); gnome_appbar_set_progress(GNOME_APPBAR(Appbar), 0.0); } else LaunchSms(Pv, FALSE, FALSE);}void on_message_changed(GtkEditable * editable, gpointer user_data){ /* check length of message with respect to the maximum size */ guint Size = (guint) (user_data); /* user_data yields Size field */ GtkText *message = GTK_TEXT(editable); guint CurSize = gtk_text_get_length(message); GtkWidget *SizeVal = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(message), "remain"); /* remaining entry widget is saved in editable widget */ if (CurSize >= Size) { /* check if not too much data: erase it */ gtk_text_set_point(message, CurSize); gtk_text_backward_delete(message, (CurSize - Size)); CurSize = gtk_text_get_length(message); } if ((Size - CurSize) < 0) return; if (SizeVal != (GtkWidget *) NULL) { /* update remaining */ char remain[4]; g_snprintf(remain, 4, "%d", Size - CurSize); gtk_entry_set_text(GTK_ENTRY(SizeVal), remain); }}void on_value_check(GtkEditable * editable, gpointer user_data){ /* Check if a parameter entry is an alias and change it */ GtkEntry *param = GTK_ENTRY(editable); gchar *tmp = gtk_entry_get_text(param); gchar *key,*value; if ((AliasHash) && (tmp) && (tmp[0] == '@')) { key = g_strdup(tmp+1); /* Check in alias hash array */ value = (gchar *)g_hash_table_lookup (AliasHash, (gconstpointer) key); if (value) { /* update with aliased value */ gtk_entry_set_text(param,value); } g_free(key); }}void on_alias_clist_select_row(GtkCList *clist, gint row, gint column, GdkEvent *event, gpointer user_data){ /* called on each select/unselect in the aliases clist */ GtkEntry *alias = GTK_ENTRY(lookup_widget(GTK_WIDGET(clist), "alias_key")); GtkEntry *value = GTK_ENTRY(lookup_widget(GTK_WIDGET(clist), "alias_value")); gchar *key_s; gchar *value_s; if ((int)user_data == SEL_PRESSED) { gtk_clist_get_text(clist, row, KEY_COL, &key_s); gtk_clist_get_text(clist, row, VAL_COL, &value_s); aliasRow = row; gtk_entry_set_text(alias,key_s); gtk_entry_set_text(value,value_s); } else { aliasRow = -1; gtk_entry_set_text(alias,""); gtk_entry_set_text(value,""); }}void on_updown_clicked(GtkButton *button, gpointer user_data){ /* Called to moved items in the clist */ GtkCList *clist = GTK_CLIST(lookup_widget(GTK_WIDGET(button), "alias_clist")); if (aliasRow >= 0) { gint row1; gint row2; if ((int)user_data == UP_PRESSED) { row1 = aliasRow; row2 = aliasRow -1; } else { row1 = aliasRow+1; row2 = aliasRow; } gtk_clist_moveto(clist, aliasRow,KEY_COL,0.5,0.5); gtk_clist_swap_rows(clist, row1, row2); gtk_clist_unselect_row(clist,row1,KEY_COL); gtk_clist_unselect_row(clist,row2,KEY_COL); aliasRow = -1; }}void on_add_clicked(GtkButton *button, gpointer user_data){ /* called to add a new pair of alias/value */ GtkCList *clist = GTK_CLIST(lookup_widget(GTK_WIDGET(button), "alias_clist")); GtkEntry *alias = GTK_ENTRY(lookup_widget(GTK_WIDGET(button), "alias_key")); GtkEntry *value = GTK_ENTRY(lookup_widget(GTK_WIDGET(button), "alias_value")); gchar *key_s = gtk_entry_get_text(alias); gchar *value_s = gtk_entry_get_text(value); gchar *tmp[ALIAS_CLIST_COLS]; if (key_s && value_s && strlen(key_s) && strlen(value_s)) { tmp[KEY_COL] = (gchar *) key_s; tmp[VAL_COL] = (gchar *) value_s; if (!AliasHash) AliasHash = g_hash_table_new(g_str_hash,g_str_equal); if (g_hash_table_lookup (AliasHash, (gconstpointer) key_s) == NULL) { /* add it to clist and hash if not allready present */ gtk_clist_append (clist,tmp); g_hash_table_insert(AliasHash,(gpointer) key_s, (gpointer) value_s); } gtk_entry_set_text(alias,""); gtk_entry_set_text(value,""); } if (aliasRow >= 0) { gtk_clist_unselect_row(clist,aliasRow,KEY_COL); aliasRow = -1; }}void on_delete_clicked(GtkButton *button, gpointer user_data){ /* called to delete a selected pair of alias/value */ GtkEntry *alias = GTK_ENTRY(lookup_widget(GTK_WIDGET(button), "alias_key")); GtkEntry *value = GTK_ENTRY(lookup_widget(GTK_WIDGET(button), "alias_value")); GtkCList *clist = GTK_CLIST(lookup_widget(GTK_WIDGET(button), "alias_clist")); gchar *key_s = gtk_entry_get_text(alias); if (aliasRow >= 0) { gtk_clist_remove(clist,aliasRow); gtk_clist_unselect_row(clist,aliasRow,KEY_COL); g_hash_table_remove(AliasHash, (gconstpointer) key_s); aliasRow = -1; } gtk_entry_set_text(alias,""); gtk_entry_set_text(value,"");}static void update_alias_file(gpointer key, gpointer value, gpointer user_data){ /* local function called for each each alias/value pair */ FILE *fp = (FILE *)user_data; fprintf(fp,"%s %s\n",(gchar *) key,(gchar *) value);}void on_alias_ok_pressed(GtkButton * button, gpointer user_data){ gchar *path; if (((int)user_data == OK_PRESSED) && (g_hash_table_size(AliasHash)>0)) { FILE *fp; /* We have a hash : save the file */ path = gnome_util_prepend_user_home(".smssend/aliases"); if (g_file_test(path, G_FILE_TEST_ISFILE)) unlink(path); fp = fopen(path,"a"); if (fp != (FILE *)NULL) { time_t now = time(NULL); fprintf(fp,"# Alias file generated by %s version %s\n#\n",PACKAGE,VERSION); fprintf(fp,"# Date: %s#\n",ctime(&now)); g_hash_table_foreach(AliasHash,update_alias_file,(gpointer)fp); fclose(fp); } g_free(path); }}static void update_script_file(gpointer key, gpointer value, gpointer user_data){ /* local function called for each each script */ FILE *fp = (FILE *)user_data; fprintf(fp,"%s\n",(gchar *) key);}void on_script_val_pressed(GtkButton * button, gpointer user_data){ GtkCList *clist = GTK_CLIST(lookup_widget(GTK_WIDGET(Scripts), "script_clist")); /* if OK or APPLY, updated hashes and notebook */ if ((int)user_data != CANCEL_PRESSED) { GtkNotebook *nb = GTK_NOTEBOOK(Notebook); int row; if (!SavedProviderHash) SavedProviderHash = g_hash_table_new(g_str_hash,g_str_equal); /* get script selection state from clist*/ for (row=0;row < NumProvider;row++) { gchar *row_data[SCRIPT_CLIST_COLS] = {NULL,NULL,NULL}; GdkPixmap *pixmap; GdkBitmap *mask; gint is_show,is_save; #define FILENAME row_data[SCRIPT_COL] #define SHOW row_data[SHOW_COL] #define SAVE row_data[SAVE_COL] PProvider_t Pv = (PProvider_t) NULL; gtk_clist_get_text(clist, row, SCRIPT_COL, &FILENAME); /* gtk_clist_get_text(clist, row, SHOW_COL, &SHOW); gtk_clist_get_text(clist, row, SAVE_COL, &SAVE); */ is_show = gtk_clist_get_pixmap(clist, row, SHOW_COL, &pixmap, &mask); is_save = gtk_clist_get_pixmap(clist, row, SAVE_COL, &pixmap, &mask); Pv = g_hash_table_lookup(ProviderHash,(gconstpointer)FILENAME); /* add it or not to the hash */ if (is_show) { if (g_hash_table_lookup(ShownProviderHash,(gconstpointer)FILENAME) == NULL) show_provider(FILENAME,Pv); } else /* Not SHOW */ { Pv = g_hash_table_lookup(ShownProviderHash,(gconstpointer)FILENAME); if (Pv) { /* get page number */ gint page = gtk_notebook_page_num(nb,Pv->PageWidget); /* TODO: free stuff ? */ /* Remove from hash */ g_hash_table_remove(ShownProviderHash,(gconstpointer)FILENAME); /* Remove from notebook */ gtk_notebook_remove_page(nb,page); } } if (is_save) { if (g_hash_table_lookup(SavedProviderHash,(gconstpointer)FILENAME) == NULL) /* Add it to saved hash */ g_hash_table_insert(SavedProviderHash,(gpointer)FILENAME, (gpointer) Pv); } else /* Not SAVE */ { Pv = g_hash_table_lookup(SavedProviderHash,(gconstpointer)FILENAME); if (Pv) { /* TODO: free stuff ? */ /* Remove from hash */ g_hash_table_remove(SavedProviderHash,(gconstpointer)FILENAME); } } } /* destroy hash if empty */ if (g_hash_table_size(SavedProviderHash) == 0) { g_hash_table_destroy (SavedProviderHash); SavedProviderHash = (GHashTable *) NULL; } } /* only save in user file when OK */ if ((int)user_data == OK_PRESSED) { FILE *fp; gchar *path; /* Save the list of scripts in a file */ path = gnome_util_prepend_user_home(".smssend/scripts"); if (g_file_test(path, G_FILE_TEST_ISFILE)) unlink(path); if (SavedProviderHash) { fp = fopen(path,"a"); if (fp != (FILE *)NULL) { time_t now = time(NULL); fprintf(fp,"# Scripts file generated by %s version %s\n#\n",PACKAGE,VERSION); fprintf(fp,"# Date: %s#\n",ctime(&now)); g_hash_table_foreach(SavedProviderHash,update_script_file,(gpointer)fp); fclose(fp); } } g_free(path); } /* delete clist */ gtk_clist_clear(clist); gtk_widget_hide(Scripts);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -