/* * Get a child node according to its name. */ static GtkCTreeNode* gdisp_getChildAccordingToItsName ( Kernel_T *kernel, GtkCTreeNode *parentNode, gchar *requestedChildName ) { GtkWidget *cTree = (GtkWidget*)NULL; GtkCTreeRow *parentNodeRow = (GtkCTreeRow*)NULL; GtkCTreeNode *parentChild = (GtkCTreeNode*)NULL; GtkCTreeNode *requestedChild = (GtkCTreeNode*)NULL; gchar *childName = (gchar*)NULL; /* * Deduce node row from node. */ cTree = kernel->widgets.sampledSymbolHTree; parentNodeRow = GTK_CTREE_ROW(parentNode); /* * Loop over all children. */ parentChild = parentNodeRow->children; while (requestedChild == (GtkCTreeNode*)NULL && parentChild != (GtkCTreeNode*)NULL ) { childName = (gchar*)gtk_ctree_node_get_row_data(GTK_CTREE(cTree), parentChild); if (childName != (gchar*)NULL && strcmp(childName,requestedChildName) == 0) { requestedChild = parentChild; } else { parentChild = GTK_CTREE_NODE_NEXT(parentChild); } } return requestedChild; }
static gint mimeview_key_pressed(GtkWidget *widget, GdkEventKey *event, MimeView *mimeview) { SummaryView *summaryview; GtkCTree *ctree = GTK_CTREE(widget); GtkCTreeNode *node; if (!event) return FALSE; if (!mimeview->opened) return FALSE; switch (event->keyval) { case GDK_space: if (textview_scroll_page(mimeview->textview, FALSE)) return TRUE; node = GTK_CTREE_NODE_NEXT(mimeview->opened); if (node) { gtk_sctree_unselect_all(GTK_SCTREE(ctree)); gtk_sctree_select(GTK_SCTREE(ctree), node); return TRUE; } break; case GDK_BackSpace: textview_scroll_page(mimeview->textview, TRUE); return TRUE; case GDK_Return: textview_scroll_one_line(mimeview->textview, (event->state & GDK_MOD1_MASK) != 0); return TRUE; case GDK_n: case GDK_N: BREAK_ON_MODIFIER_KEY(); if (!GTK_CTREE_NODE_NEXT(mimeview->opened)) break; KEY_PRESS_EVENT_STOP(); gtk_signal_emit_by_name(GTK_OBJECT(ctree), "scroll_vertical", GTK_SCROLL_STEP_FORWARD, 0.0); return TRUE; case GDK_p: case GDK_P: BREAK_ON_MODIFIER_KEY(); if (!GTK_CTREE_NODE_PREV(mimeview->opened)) break; KEY_PRESS_EVENT_STOP(); gtk_signal_emit_by_name(GTK_OBJECT(ctree), "scroll_vertical", GTK_SCROLL_STEP_BACKWARD, 0.0); return TRUE; case GDK_y: BREAK_ON_MODIFIER_KEY(); KEY_PRESS_EVENT_STOP(); mimeview_save_as(mimeview); return TRUE; case GDK_t: BREAK_ON_MODIFIER_KEY(); KEY_PRESS_EVENT_STOP(); mimeview_display_as_text(mimeview); return TRUE; case GDK_l: BREAK_ON_MODIFIER_KEY(); KEY_PRESS_EVENT_STOP(); mimeview_launch(mimeview); return TRUE; case GDK_o: BREAK_ON_MODIFIER_KEY(); KEY_PRESS_EVENT_STOP(); mimeview_open_with(mimeview); return TRUE; default: break; } if (!mimeview->messageview->mainwin) return FALSE; summaryview = mimeview->messageview->mainwin->summaryview; summary_pass_key_press_event(summaryview, event); return TRUE; }
gint gtk_dir_tree_open_dir(GtkDirTree *dir_tree, const gchar *path) { GtkCTreeNode *root_node, *node; GtkDirTreeNode *dir_node; DIR *dir; gchar *c; gchar *folder; gint nlen; gint new_path, new_node; gchar *text; gchar root[5], root1[5], root2[5], root3[5], root4[5]; gchar *aux_path, *real_path; if((dir=opendir(path)) == NULL) return FALSE; closedir(dir); /* GET ABSOLUTE PATH */ sprintf(root,"%s",G_DIR_SEPARATOR_S); sprintf(root1,"%s.",G_DIR_SEPARATOR_S); sprintf(root2,"%s..",G_DIR_SEPARATOR_S); sprintf(root3,"%s..%s",G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); sprintf(root4,"%s.%s",G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); if(path){ gint length; aux_path = g_strdup(path); length = strlen(aux_path); if(strcmp(aux_path + length - 2, root1) == 0){ if(length == 2) { g_free(aux_path); aux_path = g_strdup(root); } else { aux_path[length - 1] = '\0'; } } else if(strcmp(aux_path + length - 3, root2) == 0){ if(length == 3) { g_free(aux_path); aux_path = g_strdup(root); } else { gint i = length - 4; while(i >= 0){ if(aux_path[i] == root[0]){ aux_path[i+1] = '\0'; break; } i--; } } } else if(strcmp(aux_path + length - 4, root3) == 0){ if(length == 4) { g_free(aux_path); aux_path = g_strdup(root); } else { gint i = length - 5; while(i >= 0){ if(aux_path[i] == root[0]){ aux_path[i+1] = '\0'; break; } i--; } } } else if(strcmp(aux_path + length - 3, root4) == 0){ if(length == 3) { g_free(aux_path); aux_path = g_strdup(root); } else { aux_path[length - 2] = '\0'; } } } else aux_path = g_strdup(G_DIR_SEPARATOR_S); real_path = g_strdup(aux_path); g_free(aux_path); c = (gchar *)real_path; folder = NULL; nlen = 0; root_node = gtk_ctree_node_nth(GTK_CTREE(dir_tree), 1); gtk_ctree_expand(GTK_CTREE(dir_tree), root_node); new_path = FALSE; new_node = TRUE; while(*c != '\0' && *c != '\n' && c != NULL){ nlen++; folder = (char *)g_realloc(folder, (nlen+1)*sizeof(char)); folder[nlen-1] = *c; folder[nlen]='\0'; if(*c == G_DIR_SEPARATOR){ if(new_path){ node = GTK_CTREE_ROW(root_node)->children; while(node){ dir_node = gtk_ctree_node_get_row_data(GTK_CTREE(dir_tree), node); text = dir_node->path; if(strcmp(text, folder) == 0){ gtk_ctree_expand(GTK_CTREE(dir_tree), node); root_node = node; break; } node = GTK_CTREE_NODE_NEXT(node); } } else { new_path = TRUE; } new_node = FALSE; } else { new_node = TRUE; } c++; } if(new_node){ nlen++; folder = (char *)g_realloc(folder, (nlen+1)*sizeof(char)); folder[nlen-1] = G_DIR_SEPARATOR; folder[nlen]='\0'; node = GTK_CTREE_ROW(root_node)->children; while(node){ dir_node = gtk_ctree_node_get_row_data(GTK_CTREE(dir_tree), node); text = dir_node->path; if(strcmp(text, folder) == 0){ gtk_ctree_expand(GTK_CTREE(dir_tree), node); root_node = node; break; } node = GTK_CTREE_NODE_NEXT(node); } } g_free(folder); if (gtk_ctree_node_is_visible(GTK_CTREE(dir_tree), root_node) != GTK_VISIBILITY_FULL) { gtk_widget_map(GTK_WIDGET(dir_tree)); gtk_ctree_node_moveto(GTK_CTREE(dir_tree), root_node, 0, 0.5, 0.5); } gtk_ctree_select(GTK_CTREE(dir_tree), root_node); return TRUE; }