Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature request for a "shelf" option ( #51) #52

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

DevHyperCoder
Copy link

In relation with #51

dragon.c Outdated
// https://stackoverflow.com/a/23497087
GtkWidget*
find_child(GtkWidget* parent, const gchar* name)
{
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indentation of this entire function is severely off.

dragon.c Outdated
Comment on lines 188 to 189
}
while ((children = g_list_next(children)) != NULL);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

} and while typically go on the same line for do .. while loops so that it's not confused as a regular while loop.

Suggested change
}
while ((children = g_list_next(children)) != NULL);
} while ((children = g_list_next(children)) != NULL);

@@ -486,6 +539,9 @@ int main (int argc, char **argv) {
} else if (strcmp(argv[i], "-x") == 0
|| strcmp(argv[i], "--and-exit") == 0) {
and_exit = true;
} else if (strcmp(argv[i], "-X") == 0
|| strcmp(argv[i], "--individual-exit") == 0) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kind of a long name for a cli arg, something simpler might be better. But I guess not that big of a deal since there's the short form -X.

Comment on lines +2 to +5

# clangd
compile_commands.json
.cache/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO these should go into user's global ignore file rather than on the project's one.

dragon.c Outdated
gtk_main_quit();
}

if(individual_exit) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use spaces before and after the parens. e.g if (x) {

return;
}

GtkWidget* button = find_child(vbox,dd->text);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Space after the comma.

Suggested change
GtkWidget* button = find_child(vbox,dd->text);
GtkWidget* button = find_child(vbox, dd->text);

dragon.c Outdated
@@ -137,10 +141,58 @@ void drag_end(GtkWidget *widget, GdkDragContext *context, gpointer user_data) {
if (action_str[0] == 'i')
free(action_str);
}
if (and_exit)

if (and_exit){
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What happens when user invokes both -x and -X ? Seems like -x will take priority. It's more typical that the latter argument provided via cli to override the previous one.

Instead of using two bools, I'd use a single enum enum { QUIT_NONE, QUIT_ALL, QUIT_ITEM } where QUIT_ALL would be the current -x and QUIT_ITEM would be -X.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should do the trick. Though the names could be better.

diff --git a/dragon.c b/dragon.c
index ae3bac0..4c253f6 100644
--- a/dragon.c
+++ b/dragon.c
@@ -35,13 +35,12 @@ char *progname;
 bool verbose = false;
 int mode = 0;
 int thumb_size = 96;
-bool and_exit;
-bool individual_exit; // TODO docs ; man
 bool keep;
 bool print_path = false;
 bool icons_only = false;
 bool always_on_top = false;
 
+static enum { QUIT_NONE, QUIT_ALL, QUIT_ITEM } quit_mode;
 static char *stdin_files;
 
 #define MODE_HELP 1
@@ -142,11 +141,9 @@ void drag_end(GtkWidget *widget, GdkDragContext *context, gpointer user_data) {
             free(action_str);
     }
 
-    if (and_exit){
+    if (quit_mode == QUIT_ALL) {
         gtk_main_quit();
-    }
-
-    if(individual_exit) {
+    } else if (quit_mode == QUIT_ITEM) {
         if (uri_count == 0) {
             gtk_main_quit();
             return;
@@ -412,7 +409,7 @@ drag_data_received (GtkWidget          *widget,
     } else if (verbose)
         fputs("Received nothing\n", stderr);
     gtk_drag_finish (context, TRUE, FALSE, time);
-    if (and_exit)
+    if (quit_mode == QUIT_ALL)
         gtk_main_quit();
 }
 
@@ -538,10 +535,10 @@ int main (int argc, char **argv) {
             mode = MODE_TARGET;
         } else if (strcmp(argv[i], "-x") == 0
                 || strcmp(argv[i], "--and-exit") == 0) {
-            and_exit = true;
+            quit_mode = QUIT_ALL;
         } else if (strcmp(argv[i], "-X") == 0
                 || strcmp(argv[i], "--individual-exit") == 0) {
-            individual_exit = true;
+            quit_mode = QUIT_ITEM;
         } else if (strcmp(argv[i], "-k") == 0
                 || strcmp(argv[i], "--keep") == 0) {
             keep = true;

@DevHyperCoder
Copy link
Author

Does the code formatting in this repo conform to any existing utility (like astyle). That would make the life easier for future contributiors

Copy link
Contributor

@N-R-K N-R-K left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The --help output needs to be updated as well. Otherwise mostly seems okay, can't say for sure since I'm not too well versed on glib nor gtk.

}

if (GTK_IS_CONTAINER(parent)) {
GList *children = gtk_container_get_children(GTK_CONTAINER(parent));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it possible for this to return NULL ? If it is then it's going to lead to a null-deref down below.

bool keep;
bool print_path = false;
bool icons_only = false;
bool always_on_top = false;

static enum { QUIT_NONE, QUIT_ALL, QUIT_ITEM } quit_mode;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the cli arg will be kept --individual-exit then probably should rename QUIT_ITEM to QUIT_INDIVIDUAL.

Comment on lines +145 to +149
if (quit_mode == QUIT_ALL){
gtk_main_quit();
}

if (quit_mode == QUIT_ITEM) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Space after ). Also since they are mutually exclusive, else if makes more sense IMO.

Suggested change
if (quit_mode == QUIT_ALL){
gtk_main_quit();
}
if (quit_mode == QUIT_ITEM) {
if (quit_mode == QUIT_ALL) {
gtk_main_quit();
} else if (quit_mode == QUIT_ITEM) {

if (button != NULL) {
gtk_container_remove(GTK_CONTAINER(vbox), button);
} else {
fprintf(stderr, "Could not find button with label: %s",dd->text);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
fprintf(stderr, "Could not find button with label: %s",dd->text);
fprintf(stderr, "Could not find button with label: %s", dd->text);

and_exit = true;
quit_mode = QUIT_ALL;
} else if (strcmp(argv[i], "-X") == 0
|| strcmp(argv[i], "--individual-exit") == 0) {
Copy link
Contributor

@FichteFoll FichteFoll Jun 10, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The naming isn't exactly intuitive to me. I wouldn't expect this option to cause the application to exit once all the individual items have been dragged out of it.

How about naming it --item-remove, --remove-individual, --once-each or similar and then use this option together with --and-exit to trigger an exit once all items have been moved out? Whereas if the option wasn't specified, --and-exit would still cause a quit after the first successful drag.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah --once-each sounds like a better naming option to me as well.

@@ -115,6 +117,8 @@ void drag_data_get(GtkWidget *widget,
}

void drag_end(GtkWidget *widget, GdkDragContext *context, gpointer user_data) {
uri_count--;
Copy link
Contributor

@FichteFoll FichteFoll Jun 10, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will break target mode together with shelf mode (or 'drag once mode') and cause URIs to be overridden as that uses the uri_count counter for indexing. Besides, imo it would be better to have this near the code that is responsible for handling individual entiries when quit_mode == QUIT_ITEM.

And finally, what if -X is used together with --all?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so you mean i should decrement uri_count near the if statement ? Or should i make it use a different counter

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants