We no longer use tooltips for metadata YAY!

This commit is contained in:
Scoopta 2019-08-27 21:36:44 -07:00
parent 19aaa18391
commit 34681ca8f9
6 changed files with 113 additions and 21 deletions

View File

@ -7,6 +7,7 @@ C_SRCS += \
../src/config.c \ ../src/config.c \
../src/main.c \ ../src/main.c \
../src/map.c \ ../src/map.c \
../src/property_label.c \
../src/utils.c \ ../src/utils.c \
../src/wofi.c ../src/wofi.c
@ -14,6 +15,7 @@ OBJS += \
./src/config.o \ ./src/config.o \
./src/main.o \ ./src/main.o \
./src/map.o \ ./src/map.o \
./src/property_label.o \
./src/utils.o \ ./src/utils.o \
./src/wofi.o ./src/wofi.o
@ -21,6 +23,7 @@ C_DEPS += \
./src/config.d \ ./src/config.d \
./src/main.d \ ./src/main.d \
./src/map.d \ ./src/map.d \
./src/property_label.d \
./src/utils.d \ ./src/utils.d \
./src/wofi.d ./src/wofi.d

View File

@ -7,6 +7,7 @@ C_SRCS += \
../src/config.c \ ../src/config.c \
../src/main.c \ ../src/main.c \
../src/map.c \ ../src/map.c \
../src/property_label.c \
../src/utils.c \ ../src/utils.c \
../src/wofi.c ../src/wofi.c
@ -14,6 +15,7 @@ OBJS += \
./src/config.o \ ./src/config.o \
./src/main.o \ ./src/main.o \
./src/map.o \ ./src/map.o \
./src/property_label.o \
./src/utils.o \ ./src/utils.o \
./src/wofi.o ./src/wofi.o
@ -21,6 +23,7 @@ C_DEPS += \
./src/config.d \ ./src/config.d \
./src/main.d \ ./src/main.d \
./src/map.d \ ./src/map.d \
./src/property_label.d \
./src/utils.d \ ./src/utils.d \
./src/wofi.d ./src/wofi.d

33
inc/property_label.h Normal file
View File

@ -0,0 +1,33 @@
/*
* Copyright (C) 2019 Scoopta
* This file is part of Wofi
* Wofi is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Wofi is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Wofi. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PROPERTY_LABEL_H
#define PROPERTY_LABEL_H
#include <map.h>
#include <gtk/gtk.h>
#define WOFI_TYPE_PROPERTY_LABEL wofi_property_label_get_type()
G_DECLARE_FINAL_TYPE(WofiPropertyLabel, wofi_property_label, WOFI, PROPERTY_LABEL, GtkLabel);
GtkWidget* wofi_property_label_new(const gchar* str);
void wofi_property_label_add_property(WofiPropertyLabel* this, const gchar* key, gchar* value);
const gchar* wofi_property_label_get_property(WofiPropertyLabel* this, const gchar* key);
#endif

View File

@ -19,6 +19,7 @@
#include <map.h> #include <map.h>
#include <config.h> #include <config.h>
#include <property_label.h>
#include <errno.h> #include <errno.h>
#include <stddef.h> #include <stddef.h>

52
src/property_label.c Normal file
View File

@ -0,0 +1,52 @@
/*
* Copyright (C) 2019 Scoopta
* This file is part of Wofi
* Wofi is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Wofi is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Wofi. If not, see <http://www.gnu.org/licenses/>.
*/
#include <property_label.h>
struct _WofiPropertyLabel {
GtkLabel super;
struct map* properties;
};
G_DEFINE_TYPE(WofiPropertyLabel, wofi_property_label, GTK_TYPE_LABEL);
static void wofi_property_label_init(WofiPropertyLabel* this) {
this->properties = map_init();
}
static void finalize(GObject* obj) {
WofiPropertyLabel* this = WOFI_PROPERTY_LABEL(obj);
map_free(this->properties);
G_OBJECT_CLASS(wofi_property_label_parent_class)->finalize(obj);
}
static void wofi_property_label_class_init(WofiPropertyLabelClass* class) {
GObjectClass* g_class = G_OBJECT_CLASS(class);
g_class->finalize = finalize;
}
GtkWidget* wofi_property_label_new(const gchar* str) {
return g_object_new(WOFI_TYPE_PROPERTY_LABEL, "label", str, NULL);
}
void wofi_property_label_add_property(WofiPropertyLabel* this, const gchar* key, gchar* value) {
map_put(this->properties, key, value);
}
const gchar* wofi_property_label_get_property(WofiPropertyLabel* this, const gchar* key) {
return map_get(this->properties, key);
}

View File

@ -25,8 +25,9 @@ static const gchar* filter;
static char* mode; static char* mode;
static time_t filter_time; static time_t filter_time;
static int64_t filter_rate; static int64_t filter_rate;
struct node { struct node {
char* label, *tooltip; char* text, *action;
GtkContainer* container; GtkContainer* container;
}; };
@ -72,22 +73,21 @@ static void get_search(GtkSearchEntry* entry, gpointer data) {
gtk_list_box_invalidate_filter(GTK_LIST_BOX(inner_box)); gtk_list_box_invalidate_filter(GTK_LIST_BOX(inner_box));
} }
static GtkWidget* create_label(const char* text, char* tooltip) { static GtkWidget* create_label(const char* text, char* action) {
GtkWidget* label = gtk_label_new(text); GtkWidget* label = wofi_property_label_new(text);
gtk_widget_set_name(label, "unselected"); gtk_widget_set_name(label, "unselected");
gtk_widget_set_tooltip_text(label, tooltip); wofi_property_label_add_property(WOFI_PROPERTY_LABEL(label), "action", action);
gtk_widget_set_has_tooltip(label, FALSE);
gtk_label_set_xalign(GTK_LABEL(label), 0); gtk_label_set_xalign(GTK_LABEL(label), 0);
return label; return label;
} }
static gboolean insert_widget(gpointer data) { static gboolean insert_widget(gpointer data) {
struct node* node = data; struct node* node = data;
GtkWidget* label = create_label(node->label, node->tooltip); GtkWidget* label = create_label(node->text, node->action);
gtk_container_add(node->container, label); gtk_container_add(node->container, label);
gtk_widget_show(label); gtk_widget_show(label);
free(node->label); free(node->text);
free(node->tooltip); free(node->action);
free(node); free(node);
return FALSE; return FALSE;
} }
@ -149,15 +149,15 @@ static void* do_run(void* data) {
wl_list_for_each_reverse_safe(node, tmp, cache, link) { wl_list_for_each_reverse_safe(node, tmp, cache, link) {
struct node* label = malloc(sizeof(struct node)); struct node* label = malloc(sizeof(struct node));
char* text = strrchr(node->line, '/'); char* text = strrchr(node->line, '/');
char* tooltip = strchr(node->line, ' ') + 1; char* action = strchr(node->line, ' ') + 1;
if(text == NULL) { if(text == NULL) {
text = tooltip; text = action;
} else { } else {
++text; ++text;
} }
map_put(cached, tooltip, "true"); map_put(cached, action, "true");
label->label = strdup(text); label->text = strdup(text);
label->tooltip = strdup(tooltip); label->action = strdup(action);
label->container = GTK_CONTAINER(inner_box); label->container = GTK_CONTAINER(inner_box);
g_idle_add(insert_widget, label); g_idle_add(insert_widget, label);
utils_sleep_millis(1); utils_sleep_millis(1);
@ -185,8 +185,8 @@ static void* do_run(void* data) {
stat(full_path, &info); stat(full_path, &info);
if(access(full_path, X_OK) == 0 && S_ISREG(info.st_mode) && !map_contains(cached, full_path)) { if(access(full_path, X_OK) == 0 && S_ISREG(info.st_mode) && !map_contains(cached, full_path)) {
struct node* node = malloc(sizeof(struct node)); struct node* node = malloc(sizeof(struct node));
node->label = strdup(entry->d_name); node->text = strdup(entry->d_name);
node->tooltip = strdup(full_path); node->action = strdup(full_path);
node->container = GTK_CONTAINER(inner_box); node->container = GTK_CONTAINER(inner_box);
g_idle_add(insert_widget, node); g_idle_add(insert_widget, node);
utils_sleep_millis(1); utils_sleep_millis(1);
@ -212,8 +212,8 @@ static void* do_dmenu(void* data) {
*lf = 0; *lf = 0;
} }
struct node* node = malloc(sizeof(struct node)); struct node* node = malloc(sizeof(struct node));
node->label = strdup(line); node->text = strdup(line);
node->tooltip = strdup(line); node->action = strdup(line);
node->container = GTK_CONTAINER(inner_box); node->container = GTK_CONTAINER(inner_box);
g_idle_add(insert_widget, node); g_idle_add(insert_widget, node);
utils_sleep_millis(1); utils_sleep_millis(1);
@ -262,8 +262,8 @@ static void* do_drun(void* data) {
continue; continue;
} }
struct node* node = malloc(sizeof(struct node)); struct node* node = malloc(sizeof(struct node));
node->label = strdup(name); node->text = strdup(name);
node->tooltip = strdup(full_path); node->action = strdup(full_path);
node->container = GTK_CONTAINER(inner_box); node->container = GTK_CONTAINER(inner_box);
g_idle_add(insert_widget, node); g_idle_add(insert_widget, node);
utils_sleep_millis(1); utils_sleep_millis(1);
@ -346,7 +346,7 @@ static void activate_item(GtkListBox* box, GtkListBoxRow* row, gpointer data) {
(void) box; (void) box;
(void) data; (void) data;
GtkWidget* label = gtk_bin_get_child(GTK_BIN(row)); GtkWidget* label = gtk_bin_get_child(GTK_BIN(row));
execute_action(mode, gtk_widget_get_tooltip_text(label)); execute_action(mode, wofi_property_label_get_property(WOFI_PROPERTY_LABEL(label), "action"));
} }
static void select_item(GtkListBox* box, GtkListBoxRow* row, gpointer data) { static void select_item(GtkListBox* box, GtkListBoxRow* row, gpointer data) {
@ -367,7 +367,7 @@ static void activate_search(GtkEntry* entry, gpointer data) {
} else { } else {
GtkListBoxRow* row = gtk_list_box_get_row_at_y(GTK_LIST_BOX(inner_box), 0); GtkListBoxRow* row = gtk_list_box_get_row_at_y(GTK_LIST_BOX(inner_box), 0);
GtkWidget* label = gtk_bin_get_child(GTK_BIN(row)); GtkWidget* label = gtk_bin_get_child(GTK_BIN(row));
execute_action(mode, gtk_widget_get_tooltip_text(label)); execute_action(mode, wofi_property_label_get_property(WOFI_PROPERTY_LABEL(label), "action"));
} }
} }