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/main.c \
../src/map.c \
../src/property_label.c \
../src/utils.c \
../src/wofi.c
@ -14,6 +15,7 @@ OBJS += \
./src/config.o \
./src/main.o \
./src/map.o \
./src/property_label.o \
./src/utils.o \
./src/wofi.o
@ -21,6 +23,7 @@ C_DEPS += \
./src/config.d \
./src/main.d \
./src/map.d \
./src/property_label.d \
./src/utils.d \
./src/wofi.d

View File

@ -7,6 +7,7 @@ C_SRCS += \
../src/config.c \
../src/main.c \
../src/map.c \
../src/property_label.c \
../src/utils.c \
../src/wofi.c
@ -14,6 +15,7 @@ OBJS += \
./src/config.o \
./src/main.o \
./src/map.o \
./src/property_label.o \
./src/utils.o \
./src/wofi.o
@ -21,6 +23,7 @@ C_DEPS += \
./src/config.d \
./src/main.d \
./src/map.d \
./src/property_label.d \
./src/utils.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 <config.h>
#include <property_label.h>
#include <errno.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 time_t filter_time;
static int64_t filter_rate;
struct node {
char* label, *tooltip;
char* text, *action;
GtkContainer* container;
};
@ -72,22 +73,21 @@ static void get_search(GtkSearchEntry* entry, gpointer data) {
gtk_list_box_invalidate_filter(GTK_LIST_BOX(inner_box));
}
static GtkWidget* create_label(const char* text, char* tooltip) {
GtkWidget* label = gtk_label_new(text);
static GtkWidget* create_label(const char* text, char* action) {
GtkWidget* label = wofi_property_label_new(text);
gtk_widget_set_name(label, "unselected");
gtk_widget_set_tooltip_text(label, tooltip);
gtk_widget_set_has_tooltip(label, FALSE);
wofi_property_label_add_property(WOFI_PROPERTY_LABEL(label), "action", action);
gtk_label_set_xalign(GTK_LABEL(label), 0);
return label;
}
static gboolean insert_widget(gpointer 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_widget_show(label);
free(node->label);
free(node->tooltip);
free(node->text);
free(node->action);
free(node);
return FALSE;
}
@ -149,15 +149,15 @@ static void* do_run(void* data) {
wl_list_for_each_reverse_safe(node, tmp, cache, link) {
struct node* label = malloc(sizeof(struct node));
char* text = strrchr(node->line, '/');
char* tooltip = strchr(node->line, ' ') + 1;
char* action = strchr(node->line, ' ') + 1;
if(text == NULL) {
text = tooltip;
text = action;
} else {
++text;
}
map_put(cached, tooltip, "true");
label->label = strdup(text);
label->tooltip = strdup(tooltip);
map_put(cached, action, "true");
label->text = strdup(text);
label->action = strdup(action);
label->container = GTK_CONTAINER(inner_box);
g_idle_add(insert_widget, label);
utils_sleep_millis(1);
@ -185,8 +185,8 @@ static void* do_run(void* data) {
stat(full_path, &info);
if(access(full_path, X_OK) == 0 && S_ISREG(info.st_mode) && !map_contains(cached, full_path)) {
struct node* node = malloc(sizeof(struct node));
node->label = strdup(entry->d_name);
node->tooltip = strdup(full_path);
node->text = strdup(entry->d_name);
node->action = strdup(full_path);
node->container = GTK_CONTAINER(inner_box);
g_idle_add(insert_widget, node);
utils_sleep_millis(1);
@ -212,8 +212,8 @@ static void* do_dmenu(void* data) {
*lf = 0;
}
struct node* node = malloc(sizeof(struct node));
node->label = strdup(line);
node->tooltip = strdup(line);
node->text = strdup(line);
node->action = strdup(line);
node->container = GTK_CONTAINER(inner_box);
g_idle_add(insert_widget, node);
utils_sleep_millis(1);
@ -262,8 +262,8 @@ static void* do_drun(void* data) {
continue;
}
struct node* node = malloc(sizeof(struct node));
node->label = strdup(name);
node->tooltip = strdup(full_path);
node->text = strdup(name);
node->action = strdup(full_path);
node->container = GTK_CONTAINER(inner_box);
g_idle_add(insert_widget, node);
utils_sleep_millis(1);
@ -346,7 +346,7 @@ static void activate_item(GtkListBox* box, GtkListBoxRow* row, gpointer data) {
(void) box;
(void) data;
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) {
@ -367,7 +367,7 @@ static void activate_search(GtkEntry* entry, gpointer data) {
} else {
GtkListBoxRow* row = gtk_list_box_get_row_at_y(GTK_LIST_BOX(inner_box), 0);
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"));
}
}